一、集合框架是什么
集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。
任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
二、使用集合框架的好处
- 容量自增长;
- 提供了高性能的数据结构和算法,使编码更轻松,提高了程序速度和质量;
- 允许不同 API 之间的互操作,API之间可以来回传递集合;
- 可以方便地扩展或改写集合,提高代码复用性和可操作性。
- 通过使用JDK自带的集合类,可以降低代码维护和学习新API成本。
三、Java集合框架组成部分
1.接口(Interfaces )
Java集合框架接口提供了表示集合的抽象数据类型。
java.util.Collection 是集合框架的根接口,它位于集合框架层次结构的顶部。
它包含一些重要的方法,如size()、iterator()、add()、remove()、clear(),每个Collection类都必须实现这些方法。
其他一些重要的接口是 java.util.List, java.util.Set, java.util.Queue 和java.util.Map。
Map是唯一不从Collection接口继承的接口,但它是Collections框架的一部分。
所有集合框架接口都在java中的util包。
2.实现类(Implementation Classes)
Java集合框架接口为核心集合接口提供了实现类。
我们可以使用它们在Java程序中创建不同类型的集合。一些重要的集合类有ArrayList、LinkedList、HashMap、TreeMap、HashSet和TreeSet。
这些类解决了我们的大部分编程需求,但是如果我们需要一些特殊的集合类,我们可以扩展它们来创建我们的自定义集合类。
Java 1.5提供了线程安全的集合类,允许我们在遍历集合时修改它们。其中有CopyOnWriteArrayList, ConcurrentHashMap, CopyOnWriteArraySet。这些类在java.util.concurrent包中。
所有的集合类都在java.Util和java.util.concurrent包。
3.算法(Algorithms)
算法是提供一些常见功能的有用方法,如搜索(searching)、排序(sorting)和洗牌(shuffling)。
四、List
1)ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高
2)Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低
3)LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高
五、Set
1)HashSet
底层其实是包装了一个HashMap实现的
底层数据结构是数组+链表 + 红黑树
具有比较好的读取和查找性能, 可以有null 值
通过equals和HashCode来判断两个元素是否相等
非线程安全
2)LinkedHashSet
继承HashSet,本质是LinkedHashMap实现
底层数据结构由哈希表(是一个元素为链表的数组)和双向链表组成。
有序的,根据HashCode的值来决定元素的存储位置,同时使用一个链表来维护元素的插入顺序
非线程安全,可以有null 值
3)TreeSet
是一种排序的Set集合,实现了SortedSet接口,底层是用TreeMap实现的,本质上是一个红黑树原理
排序分两种:自然排序(存储元素实现Comparable接口)和定制排序(创建TreeSet时,传递一个自己实现的Comparator对象)
正常情况下不能有null值,可以重写Comparable接口 局可以有null值了。
六、Map
1)HashMap
Map接口基于哈希表的实现,是使用频率最高的用于键值对处理的数据类型。
它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,特点是访问速度快,遍历顺序不确定,线程不安全,最多允许一个key为null,允许多个value为null。
可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap类。
2)Hashtable
Hashtable和HashMap从存储结构和实现来讲有很多相似之处,不同的是它承自Dictionary类,而且是线程安全的,另外Hashtable不允许key和value为null,并发性不如ConcurrentHashMap。
Hashtable不建议在新代码中使用,不需要线程安全的场合可以用HashMap替换,需要线程安全的场合可以用ConcurrentHashMap替换。
3)LinkedHashMap
LinkedHashMap继承了HashMap,是Map接口的哈希表和链接列表实现,它维护着一个双重链接列表,此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。
4)TreeMap
TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序(自然顺序),也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。