Java 集合类详解
collections java方法
collections java方法
Collections是Java中的一个工具类,提供了一系列静态方法,用于操作集合类(Collection)和数组。本文将介绍Collections类中的一些常用方法。
一、排序方法
Collections类提供了多种排序方法,可以对列表、集合或数组进行排序。其中最常用的是sort()方法,可以对List进行升序排序。例如:
List list = new ArrayList<>();
list.add(3);
list.add(1);
list.add(2);
Collections.sort(list);
System.out.println(list); // 输出:[1, 2, 3]
二、查找方法
Collections类还提供了一些查找方法,如binarySearch()和indexOfSubList()等。binarySearch()方法用于在有序列表中查找指定元素的索引,如下所示:
List list = new ArrayList<>();
list.add(1); list.add(2);
list.add(3);
int index = Collections.binarySearch(list, 2);
System.out.println(index); // 输出:1
三、反转方法
Collections类的reverse()方法可以用于反转List中元素的顺序。例如:
List list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
Collections.reverse(list);
System.out.println(list); // 输出:[3, 2, 1]
四、填充方法
Collections类的fill()方法可以将List中的所有元素替换为指定的元素。例如:
guava原理
guava原理
Guava是由Google开发的Java开发工具库,它封装了许多Java API中不便使用的功能,提供了高效且易于使用的API,为Java开发人员提供了更好的开发体验。本文将对Guava的原理进行介绍。
一、Guava原理概述
Guava可以被看作是对Java API的补充。Guava工具库包含了许多不同的模块,例如集合、缓存、并发、字符串处理等等。这些模块能够方便地与Java API集成,提高了Java的可读性和可维护性。相比于Java API,Guava更加简单易用和高效,特别适用于中小规模项目的开发。
二、Guava原理详解
1. 集合
Guava集合类是Guava最受欢迎的模块之一。它提供了许多强大的集合类,比如Multiset、Multimap、FluentIterable等等。这些集合类能够更好地满足实际需求。例如,Multiset能够统计元素出现的次数,而Map无法满足这个需求;FluentIterable能够更流畅地迭代集合元素。Guava集合类提供了更加先进和可扩展的功能,优化了集合类的使用效率。
2. 缓存
Guava对缓存进行了封装和优化,提供了Local Cache和CacheBuilder两种缓存类型。Local Cache是一个简单而快速的本地缓存,它可以存储实例和方法调用的结果。CacheBuilder则提供了更多缓存选项,例如过期时间、最大数量等等。Guava的缓存类能够减少重复方法调用和IO操作,提高系统的性能。
3. 并发
Guava中的并发类提供了线程的通信和同步,以及对并发数据结构的支持。它简化了Java API在并发编程中的使用,并提供了更加友好和可扩展的接口。例如,ListenableFuture可以让我们方便地监听任务执行的状态;AtomicDouble则可以在多线程环境下更安全地更新Double类型的值。
4. 字符串处理
Guava中的字符串处理提供了更加方便的API,例如Splitter、Joiner、CaseFormat等等。通过这些API,我们可以更加方便地进行字符串格式化和转换。例如,Splitter可以将字符串分割成Iterable,简化字符串的处理代码;CaseFormat可以将不同格式的字符串相互转换。
JavaCollections的emptyList、EMPTY_LIST详解与使用说明
JavaCollections的emptyList、EMPTY_LIST详解与使⽤说
明⽬录
Collections的emptyList、EMPTY_LIST使⽤
Collections.emptyList()使⽤注意
Collections的emptyList、EMPTY_LIST使⽤
今天在看⼤佬写的代码的时候,结果集为空的情况,他返回的不是null,⽽是:
return Collections.EMPTY_LIST;
我们都知道返回null,很有可能造成空指针异常,可以使⽤emptyList或EMPTY_LIST就可以避免这个问题,除⾮你想捕获这
个为空的信息
我们在使⽤emptyList空的⽅法返回空集合的时候要注意,这个空集合是不可变的。
空的集合不可以使⽤add⽅法,会报UnsupportedOperationException异常,看如下源码:
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
空集合对象不可以使⽤put⽅法,会报IndexOutOfBoundsException异常,看如下源码:
public E get(int index) {
throw new IndexOutOfBoundsException("Index: "+index);
}
但是对于for循环都不会发⽣异常,如下的⽰例:
List list1 = Collections.emptyList();
for(String s:list1) {
}
for(int i=0;i
}
上⾯的两种for循环都可以正常的执⾏,第⼀种foreach循环,实际编译之后会变成迭代器的模式,这样我们就好理解为什么可
以正常执⾏;第⼆种是只调⽤了size⽅法,我们可以看到源码直接返回0;
public int size() {return 0;}
用PAR方法构建三种Java集合类
⽤PAR⽅法构建三种Java集合类
⽤PAR⽅法构建三种Java集合类
⽯海鹤;骆健;薛锦云
【期刊名称】《计算机与现代化》
【年(卷),期】2001(000)004
【摘要】分析了抽象程序设计语⾔Apla (Abstract Programming Language)定义的集合操作的实现算法思想,⽤PAR⽅法(分划递推法,Partition-and-Recur)推导了实现集合操作的Aph程序,并分别将这些抽象程序⽤三种数据结构(向量(Vector)、数组(Array)、链表(nodep,⾃定义))来实现,构成了⾃定义Java集合类库.该类库可⽤于Apla-Java程序⾃动转换系统和体现数据抽象思想的Java程序开发.
【总页数】8页(7-13,103)
【关键词】Apla语⾔;Java语⾔;PAR⽅法;⾯向对象程序设计;集合操作
【作者】⽯海鹤;骆健;薛锦云
【作者单位】江西师范⼤学计算机科学技术学院;江西师范⼤学计算机科学技术学院;江西师范⼤学计算机科学技术学院
【正⽂语种】中⽂
【中图分类】TP301.6
【相关⽂献】1.Java的三种应⽤程序编写及其运⾏⽅法 [J], 陈庆章
2.Java报表功能的三种实现⽅法 [J], 邱泸谊; 黄俊杰
3.Java语⾔中的三种循环语句教学研究 [J], 曾新洲
4.辨析⼀类集合包含关系问题的三种解答⽅法 [J], 朱贤良
collection方法概述
一、集合(Collection集合)
(1)集合的由来?
我们学习的是Java – 面向对象 – 操作很多对象 – 存储 – 容器(数组和StringBuffer) – 数组
而数组的长度固定,所以不适合做变化的需求,Java就提供了集合供我们使用。
(2)集合和数组的区别?
A:长度区别
数组固定
集合可变
B:内容区别
数组可以是基本类型,也可以是引用类型
集合只能是引用类型
C:元素内容
数组只能存储同一种类型
集合可以存储不同类型(其实集合一般存储的也是同一种类型)
(3)集合的继承体系结构?
由于需求不同,Java就提供了不同的集合类。这多个集合类的数据结构不同,但是它们都是要提供存储和遍历功能的,
我们把它们的共性不断的向上提取,最终就形成了集合的继承体系结构图。
(4)Collection的功能概述
A:添加功能
boolean add(Object obj):添加一个元素
boolean addAll(Collection c):添加一个集合的元素
B:删除功能
void clear():移除所有元素
boolean remove(Object o):移除一个元素
boolean removeAll(Collection c):移除一个集合的元素(是一个还是所有)
C:判断功能
boolean contains(Object o):判断集合中是否包含指定的元素
boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(是一个还是所有)
boolean isEmpty():判断集合是否为空
D:获取功能
Iterator iterator()(重点)
E:长度功能
int size():元素的个数 F:交集(了解)
boolean retainAll(Collection c) 返回值表示的是调用者集合是否发生过改变
java中entry的用法 (2)
java中entry的用法
Entry的用法详解
一、Entry的概念及功能
Entry是Java中一个重要的接口,它表示键和值的映射关系。在Java中,常见的使用Entry的类有Map和Dictionary。通过Entry,我们可以很方便地存储和获取键值对数据,并进行各种操作。
二、获取Entry集合
在Java中,我们可以通过以下几种方式来获取一个包含所有Entry对象的集合:
1. 使用entrySet()方法:Map接口提供了entrySet()方法,该方法返回一个包含所有Entry对象的Set集合。我们可以利用这个Set集合来遍历和操作键值对数据。
2. 使用entryIterator()方法:Map接口提供了entryIterator()方法,该方法返回一个迭代器(Iterator)对象。通过迭代器,我们可以逐个访问Map中的每个Entry对象。
不论是使用entrySet()还是entryIterator(),都能够很方便地获取所有的Entry对象,并进行相关操作。
三、遍历Entry集合
获得了包含所有Entry对象的集合后,我们就可以利用它们进行遍历操作了。
1. 使用for-each循环:通过for-each循环可以便捷地遍历整个Entry集合,代码简洁清晰。示例如下:
```
for (Map.Entry entry : map.entrySet()) { String key = entry.getKey();
Integer value = entry.getValue();
// TODO: 具体操作
}
```
2. 使用迭代器:如果我们需要在遍历过程中进行删除操作,可以使用迭代器。示例如下:
```
Iterator> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Java核心数据结构(List、Map、Set)原理与使用技巧
Java核⼼数据结构(List、Map、Set)原理与使⽤技巧
JDK提供了⼀组主要的数据结构实现,如List、Set等常⽤数据结构。这些数据都继承⾃java.util.Collection接⼝,并位于java.util包内。
⼀、List接⼝
最重要的三种List接⼝实现:ArrayList、Vector、LinkedList。它们的类图如下:
可以看到,3种List均来⾃AbstratList的实现。⽽AbstratList直接实现了List接⼝,并扩展⾃AbstratCollection。
ArrayList和Vector使⽤了数组实现,可以认为,ArrayList封装了对内部数组的操作。⽐如向数组中添加、删除、插⼊新的元素或数组的扩展
和重定义。对ArrayList或者Vector的操作,等价于对内部对象数组的操作。
ArrayList和Vector⼏乎使⽤了相同的算法,它们的唯⼀区别可以认为是对多线程的⽀持。ArrayList没有对⼀个⽅法做线程同步,因此不是线
程安全的。Vector中绝⼤多数⽅法都做了线程同步,是⼀种线程安全的实现。因此ArrayList和Vector的性能特性相差⽆⼏。
LinkedList使⽤了循环双向链表数据结构。LinkedList由⼀系列表项连接⽽成。⼀个表项总是包含3个部分:元素内容、前驱表项和后驱表项。如图所⽰:
LinkedList的表项源码:
private static class Node {
E item;
Node next;
Node prev;
Node(Node prev, E element, Node next) { this.item = element;
this.next = next;
this.prev = prev;
}
}
⽆论LinkedList是否为空,链表都有⼀个header表项,它既是链表的开始,也表⽰链表的结尾。它的后驱表项便是链表的第⼀个元素,前驱表项便是链表的最后⼀个元素。如图所⽰:
Java中Map的entrySet()详解以及用法
Java中Map的entrySet()详解以及⽤法
Entry
由于Map中存放的元素均为键值对,故每⼀个键值对必然存在⼀个映射关系。
Map中采⽤Entry内部类来表⽰⼀个映射项,映射项包含Key和Value(我们总说键值对,每⼀个键值对也就是⼀个Entry)
Map.Entry⾥⾯包含getKey()和getValue()⽅法
Iterator> it=map.entrySet().iterator();
while(it.hasNext()) {
Map.Entry entry=it.next();
int key=entry.getKey();
int value=entry.getValue();
System.out.println(key+" "+value);
}
entrySet
entrySet是java中 键-值对的集合,Set⾥⾯的类型是Map.Entry,⼀般可以通过map.entrySet()得到。
entrySet实现Set接⼝,⾥⾯存放的是键值对。⼀个K对应⼀个V。
⽤来遍历map的⼀种⽅法。
Set> entryseSet=map.entrySet();
for (Map.Entry entry:entryseSet) {
System.out.println(entry.getKey()+","+entry.getValue());
}
即通过getKey()得到K,getValue得到V。
keySet
还有⼀种是keySet,keySet是键的集合,Set⾥⾯的类型即key的类型
Set set = map.keySet();
for (String s:set) {
System.out.println(s+","+map.get(s));
}
四种遍历Map⽅式:
public static void main(String[] args) {
Map map = new HashMap();
java判断两个集合是否相等的方法
java判断两个集合是否相等的方法
以Java判断两个集合是否相等的方法
在Java编程中,经常会遇到需要判断两个集合是否相等的情况。判断集合相等的意思是指集合中的元素是否完全相同,顺序也相同。本文将介绍几种判断两个集合是否相等的方法。
方法一:使用equals()方法
Java中的集合类都继承自Collection接口,该接口中定义了equals()方法,用于判断两个集合是否相等。equals()方法会先判断两个集合的大小是否相等,如果不相等则返回false,如果相等则逐个比较两个集合中的元素是否相等。
```java
Collection collection1 = new ArrayList<>();
collection1.add(1);
collection1.add(2);
collection1.add(3);
Collection collection2 = new ArrayList<>();
collection2.add(1);
collection2.add(2);
collection2.add(3);
boolean isEqual = collection1.equals(collection2);
System.out.println(isEqual); // 输出 true
```
方法二:使用containsAll()方法
除了使用equals()方法外,我们还可以使用containsAll()方法来判断两个集合是否相等。containsAll()方法会判断集合A中的元素是否都包含在集合B中,如果是则返回true,否则返回false。这种方法适用于无序集合的判断。
```java
Collection collection1 = new ArrayList<>();
collection1.add(1);
collection1.add(2);
collection1.add(3);
java treeset原理
- 1 - java treeset原理
Java中的TreeSet是一个基于红黑树实现的有序集合,具有自动排序和去重功能。它是Set接口的实现类之一,继承自AbstractSet类,实现了NavigableSet接口。本文将深入介绍Java TreeSet的原理,包括红黑树、TreeSet的实现、遍历方式和常用操作等内容。
1. 红黑树
红黑树是一种自平衡二叉查找树,它的每个节点都有一个颜色属性,可以是红色或黑色。这种树具有以下特性:
1. 每个节点要么是黑色,要么是红色。
2. 根节点是黑色。
3. 每个叶子节点(NIL节点,空节点)是黑色。
4. 如果一个节点是红色,那么它的子节点必须是黑色。
5. 从任意一个节点到其每个叶子节点的所有路径都包含相同数目的黑色节点。
这些特性确保了红黑树的平衡性和搜索效率。插入、删除节点时,需要对树进行旋转和改变颜色等操作,以维持平衡。
2. TreeSet的实现
Java TreeSet是基于红黑树实现的有序集合,它的元素按照自然顺序或者指定的比较器顺序进行排序。TreeSet中的元素必须是可比较的,即实现了Comparable接口或者传入了Comparator比较器。
TreeSet的底层数据结构是红黑树,它的节点类是TreeMap中的Entry类,包含三个属性:key、value和color。TreeSet的实现主 - 2 - 要涉及以下几个方法:
1. add(E e):向TreeSet中添加元素e。首先通过比较器或者自然顺序找到要插入的位置,然后将元素包装成Entry对象,插入红黑树中,最后进行平衡操作。
2. remove(Object o):从TreeSet中删除元素o。首先通过比较器或者自然顺序找到要删除的节点,然后进行删除操作,最后进行平衡操作。
