Java集合框架主要包括两种类型的容器,
一种是集合(Collection),存储一个元素集合,
Collection 接口又有 3 种子类型,List、Set 和 Queue。
另一种是图(Map),存储键/值对映射。
Map 接口又有 :AbstractMap SortedMap Hashtable
Java集合框架常用的实现类有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap、TreeMap等等。此外还有一个实现算法的Collections类。
Collection 集合 UML类图
Map集合uml类图
1: 超级接口 Iterable:
该接口中会返回一个迭代器,实现该接口的类都能作为forEach的对象。
2:Collection : 继承了 Iterable接口,并且可以被以下类实现
3:List 接口
1: 有序集合(也称为序列),可以精确控制每个元素的插入位置,可以通过索引访问元素,并搜索列表中的元素。
2:该接口提供要给特殊的迭代器,称为 ListIterator 允许元素的插入和更换。
3:LinkedList implements List,Deque 双链表实现了List和Deque接口,实现所有可选列表操作,此实现时不同步的,如果多个线程同时访问链接列表,并且至少有一个线程在结构上修改列表,则必须在外部进行同步。
LinkedList 底层使用双向链表实现的,因此它对于数据增加删除操作效率比ArrayList要高。
对于数据的查询需要操作指针,所以查询效率比较低
LinkedList不是线程安全的
数据可重复
4:ArrayList 实现类:底层时数组实现的,并且默认的长度容量为10。
ArrayList 底层是数组结构,通过索引小标可以快速的查找数据,所以它对数据的查询效率高的多
ArrayList 不是线程安全的
ArrayList 数据可重复性
5:Vector 是实现类,实现了可扩展的对象数组。像数组一样可以使用整数索引访问组件。
Vector是线程安全的
Vector 数据可重复
Vector 通过数组来实现,但是效率一般比ArrayList低,如果不考虑线程安全,建议使用ArrayList.
3:Set 接口(无序接口)
set接口不包含重复元素,相比较List 有序接口(存储顺序和存入顺序保持一致),Set接口元素不会保持这种顺序,它会实现数学意义上的排序。
1:HashSet 此类实现了Set接口,由哈希表(HashMap)支持
HashSet 修改时不同步的
HashSet 允许存在空值
HashSet 不允许存在相同的值存入集合中
2: TreeSet
TreeSet 是线程不安全的
TreeSet 实现了SortedSet接口,通过Comparator或者Comparable维护了一个排序顺序
3:LinkedHashSet : 哈希表和链表实现了Set接口,具有可预测的迭代次序。并且通过数据的插入顺序对其进行顺序存储
4:Map 接口
map只是一个接口,不是 Collection的子接口或者实现类,它是以键值对的形式进行存储的。
将键映射到值的对象,地图不能包含重复的键,每个键可以映射最多一个值
实现类包括 :HashMap TreeMap LinkedHashMap 和 HashTable
HashMap
1: HashMap是基于哈希表的Map接口的非同步实现,允许使用 null 键和 null 值,但不能保证映射顺序
2:底层是数组的实现,数组中每一项是个单向链表,即是 数组和链表的结合体
HashTable
1: HashTable 是基于哈希表的Map接口的同步实现,不允许使用 null值和 null键
2:底层使用数组实现,数组中每一项是个单链表即数组和链表的结合体
TreeMap
1: 底层是二叉树
2:线程不同步