首页 > 技术文章 > Java集合——Collection

xiafrog 2021-01-16 20:49 原文

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

  • 数据类型相同
  • 自然排序和定制排序,通过比较的方式判断是否相同

推荐阅读