Java 集合类基本概念#
Java 中的集合框架大类可分为Collection
和Map
;两者的区别:
- 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 上的自然顺序)