Java集合——Collection
目录
分类
- Collection接口:单列数据
- List:元素有序,可重复
- Set:元素无序,不可重复
- Map接口:双列数据,key-value
Collection中的方法
-
add(Object o)
-
size()
-
addAll(Collection c)
-
clear()
-
isEmpty()
-
contains(Object o):调用equals()方法,如果没有重写,则调用Object类的equals方法,即为==
-
containsAll(Collection c)
-
remove(Object o):同样调用equals()方法
-
removeAll(Collection c):差集
-
returnAll(Collection c):交集
-
equals(Object o)
-
hashCode()
-
toArray(): 集合到数组
-
Arrays.asList():数组到集合
-
iterator()
使用Iterator接口遍历集合元素
- 实现了Iterable接口中的iterator()方法返回迭代器Iterator接口的对象
迭代器设计模式
- 提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节
遍历
while(iterator.hasNext()){
iterator.next();
//iterator.remove()
}
使用ForEach遍历集合元素
for(Object obj : collection){
}
- 内部使用的也是Iterator
- 增强for循环不会改变集合中原来的元素
List接口
- 动态数组
- 存储有序的、可重复的数据
分类
- ArrayList:主要实现类;线程不安全,效率高;底层使用Object[]存储
- LinkedList:使用频繁的插入、删除操作,效率比ArrayList高;底层使用双向链表存储
- Vector:古老实现类;线程安全,效率低;底层使用Object[]存储
常用方法
- add(int index, Object o)
- get(int index)
- indexOf(Object o)
- lastIndexOf(Object o)
- Object remove(int index):移除同时返回此元素
- Object set(int index, Object o)
- List subList(int fromIndex, int toIndex)
Set接口
- 存储无序的、不可重复的数据
- 没有新方法,使用Collection中的方法
- 数据类要重写equals()和hashCode(),两者尽可能保持一致性
分类
- HashSet:主要实现类;线程不安全;可以存储null值
- LinkedHashSet:可以按照添加顺序遍历内部数据
- TreeSet:可以按照添加对象的指定属性进行排序,底层使用红黑树
特性
以HashSet为例:
- 无序性:不等于随机性,存储位置无序,根据哈希值存储
- 不可重复性:保证equals()不返回true
添加元素的过程
以HashSet为例:
- 调用hashCode()计算哈希值
- 哈希值不同时,也可能位置一样,此时加入链表,7上8下
- 哈希值一样时,判断equals()
LinkedHashSet
- 在HashSet上提供双向链表记录添加顺序
TreeSet
- 数据类型相同
- 自然排序和定制排序,通过比较的方式判断是否相同