集合框架图
![]() |
---|
Collection
接口 是Set List Queue的 父接口
方法:
- boolean add(Object o):向集合中添加元素,添加成功返回true
- boolean addAll(Collection c):向集合中添加集合c ,添加成功返回true
- void clean():将集合清空,集合长度变为0
- boolean contains(Object o):判断集合是否包含 o
- boolean containsAll(Collection c):判断集合是否包含集合c
- boolean isEmpty():判断集合是否为空
- boolean remove(Objece o):删除指定元素o,当集合中包含多个o时,只删除第一个
- boolean removeAll(collection c):从集合中删除集合C中包含的所有元素,相当于A-(A∩C),如果删除一个或者一个以上的元素,则返回true
- boolean retainAll(Collection c):从集合中删除集合c中不包含的元素,相当于取交集;如果删除了一个或者一个以上的元素,则返回true
- int size():返回集合的长度
- Object[] toArray():将集合转化为数组
- Iterator iterator: 返回一个Iterator 迭代对象,用于遍历集合里面的元素。
集合的迭代
Collection<String> c = new ArrayList();
c.add("a");
c.add("b");
c.add(""d);
//方式一:
for(String str: c){
System.out.println(str);
}
//方式二:
Iterator it = c.itetator();
while(it.hasNext()){
str = it.next();
System.out.println(str);
}
Set集合
- 无序、不可重复
- Set的实现类 都是 线程不安全的。可以通过Collections工具类的synchronizedSortedSet方法来“包装”该Set集合,此操作最好在创建时候进行。
SortedSet s = Collections.sychronizedSortedSet(new TreeSet());
其他的完全与Collection相同相当于一个罐子, 不能记住每个元素添加顺序, 如果试图添加相同的元素 会添加失败add()方法返回 false, 且元素不会被添加。
HashSet
HashSet 按Hash算法来存储集合中的元素
特点:
- 不能保证元素的添加顺序
- HashSet不是同步的,如果有两个或者两个以上的线程同时修改了HashSet集合,必须通过代码来保证其同步
- 集合元素值可以为null
当向HashSet中添加元素时,HashSet会调用对象的hashCode()方法来得到该对象的hashCode值,根据该值来决定在HashSet中的存储位置。
如果有两个元素通过equals()方法返回true,但是hashCode()的值不同,那么HashSet同样会把他们放在不同的位置。
即HashSet 中元素相同是 equals()方法比较相等并且hashCode()返回值相同。
LinkedHashSet
1、是HashSet的子类 也是根据元素的 hashCode值存放
2、使用链表来维护元素的次序
3、当遍历集合时 会按照元素的添加顺序来访问元素
4、LinkedHashSet 性能略低于 HashSet ,但是在迭代访问的时
候有很好的性能。
SortedSet
TreeSet
TreeSet 实现了 SortedSet接口
集合内的元素是有序的、并且是同一种类型。
当向TreeSet添加元素e时,会调用该对象的compareTo(Object obj)方法与容器中的元素进行一一比较,然后根据红黑树结构找到他们的位置。compareTo()方法判断相等 ,那么添加不了。
采用红黑树算法来存储集合元素。
自然排序:升序
定制排序:
TreeSet是根据元素的实际大小进行排序的。
方法
与HashSet相比,添加了访问第一个、前一个、后一个、最后一个元素的方法,并且提供了三个从TreeSet中取子TreeSet的方法。
Comparator comparator():如果TreeSet才用了定制排序,则返回定制排序所使用的的Comparator;如果使用了自然排序,则返回null。
Object first():返回集合的第一个元素
Object last():返回集合的最后一个元素
Object lower(Object e): 比 e 小的 集合里面最大的元素 e 可以不是集合中的元素
Object higher(Object e): 大于 e 的最小的元素
SortedSet subSet(Object a,Object b):返回从 a 到 b 的子集合 左闭右开
SortedSet headSet(Object e ): 返回小于e 的元素的集合
SortedSet tailSet(Obejct e ): 返回大于等于e的元素的集合。
List
- 有序、可重复
- 可以存放null值
包含的其他方法:
Object set(int index, Object element):替换 index 位置的元素 并且返回 被替换的旧元素
Object remove(int index):删除Index处的元素,并且返回该元素
void add(int index, Object element):将元素添加到index处,原来集合index后的元素全部往后移
boolean addAll(int index, Collection c):在index处添加集合c
int indexOf(element):第一次出现的element的位置
int lastIndexOf(element):最后一次出现的位置
List subList(from, to): 返回子集合 左闭右开
void sort(Comparator c): 根据 Comparator 参数对List 集合 排序
void replaceAll(UnaryOperator operator):根据operator指定的计算规则重新设置List集合的所有元素。
ArrayList
- 基于数组实现List接口,可以理解为动态数组
- 通过initialCapacity 参数设置数组的长度,当添加元素 超过 该数组的长度时 initialCapacity 会自动增加
- 线程不安全的
如果一次性添加 很多很多元素 可以通过 ensureCapacity(int minCapacity)一次性的增加 intialCapacity
initialCapacity 默认大小为 10
void trimToSize():调整集合大小为当前元素的个数。
Vector
- 古老的 与ArrayList 差不多
- 线程安全的
Stack
继承 Vector
方法:
Object peek():返回第一个元素
Object pop():返回栈顶元素 并且删除
void push(Object item):添加元素到栈顶
LinkedList
- 同时实现了 List接口与 Queue接口
- 可以被当做 List 集合 双端队列 栈
- 随机访问时候性能差
- 插入删除方便
Queue
队列 FIFO
void add():
Object element():获取队列的头部元素
boolean offer(): 添加元素 当指定队列长度时 比 add方法好
Object peek():队列尾部元素
Object poll():删除最后一个 并且返回
Object remove(): 删除第一个 并且返回
Deque
双端队列
实现类有ArrayDeque:创建时候 可以传递 numElement参数
指定队列长度
不指定 默认为16
PriorityDueqe
- 违反了 FIFO
- 按照 从大到小的顺序 进行排列 存放
- 不允许插入 null 元素
网友评论