Java集合类基本概念

Java中的集合框架大类可分为CollectionMap;两者的区别:

  • Collection是单列集合;Map是双列集合
  • Collection中只有Set系列要求元素唯一;Map中键需要唯一,值可以重复
  • Collection的数据结构是针对元素的;Map的数据结构是针对键的。

Collection

Collection包括两大体系:

  • List: 存取有序,有索引,可以根据索引来进行取值,元素可以重复
  • Set: 存取无序,元素不可以重复

List

包含有

  • ArrayList:底层是数组实现,查询速度快,增删速度慢
  • LinkedList: 基于链表结构实现的,查询速度慢,增删速度快,提供了特殊的方法,对头尾的元素操作(进行增删查),线程不安全
  • Vector:数组结构,查询快,增删慢,线程安全,因此效率低(已过时)

Set

Set集合的特点:元素不重复,存取无序,无下标 Set集合下面有:

  • HashSet: 存储无序,元素无索引,元素不可以重复.底层是哈希表.
  • LinkedHashSet: 基于链表和哈希表共同实现的,所以具有存取有序,元素唯一的特点
  • TreeSet:基于二叉树的数据结构,元素唯一,存取无序(可以在添加元素的时候进行排序)

Map

Map是一个双列集合,其中保存的是键值对,键要求保持唯一性,值可以重复,包含:

  • HashMap
  • LinkedHashMap
  • TreeMap

工具类Collections

Collections工具类提供了大量针对Collection/Map的操作

排序操作(主要针对List接口相关)

  • reverse(List list):反转指定List集合中元素的顺序
  • shuffle(List list):对List中的元素进行随机排序(洗牌)
  • sort(List list):对List里的元素根据自然升序排序
  • sort(List list, Comparator c):自定义比较器进行排序
  • swap(List list, int i, int j):将指定List集合中i处元素和j出元素进行交换
  • rotate(List list, int distance):将所有元素向右移位指定长度,如果distance等于size那么结果不变

查找和替换(主要针对Collection接口相关)

  • binarySearch(List list, Object key):使用二分搜索法,以获得指定对象在List中的索引,前提是集合已经排序
  • max(Collection col):返回最大元素
  • max(Collection col, Comparator comp):根据自定义比较器,返回最大元素
  • min(Collection col):返回最小元素
  • min(Collection col, Comparator comp):根据自定义比较器,返回最小元素
  • fill(List list, Object obj):使用指定对象填充
  • frequency(Collection Object o):返回指定集合中指定对象出现的次数
  • replaceAll(List list, Object old, Object new):替换

设置不可变集合

Collections有三类方法可返回一个不可变集合:

  • emptyXxx():返回一个空的不可变的集合对象
  • singletonXxx():返回一个只包含指定对象的,不可变的集合对象。
  • unmodifiableXxx():返回指定集合对象的不可变视图

其它

  • disjoint(Collection<?> c1, Collection<?> c2): 如果两个指定 collection 中没有相同的元素,则返回 true。
  • addAll(Collection<? super T> c, T... a): 一种方便的方式,将所有指定元素添加到指定 collection 中
  • Comparator<T> reverseOrder(Comparator<T> cmp): 返回一个比较器,它强行反转指定比较器的顺序。如果指定比较器为 null,则此方法等同于 reverseOrder()(换句话说,它返回一个比较器,该比较器将强行反转实现 Comparable 接口那些对象 collection 上的自然顺序)

参考链接