所有集合类都位于java.util包下。Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。Map是一种键和值的映射关系(双列集合) ,Collection中存储了一组对象。
Collection接口
Collection接口有两个主要的子接口List和Set;Set
表示不允许有重复元素的集合,List
表示允许有重复元素的集合
List接口又有两个常用的实现类ArrayList和LinkedList;
ArrayList数组线性表的特点为:类似数组的形式进行存储,因此它的随机访问速度极快;不适合于在线性表中间需要频繁进行插入和删除操作。因为每次插入和删除都需要移动数组中的元素。
注意: a、如果在初始化ArrayList的时候没有指定初始化长度的话,默认的长度为10。
b、ArrayList扩容ensureCapacity的方案为“原始容量*3/2+1"。
c、ArrayList是线程不安全的,在多线程的情况下不要使用。
d、ArrayList实现遍历的几种方法:第一种使用foreach遍历List,第二种把链表变为数组相关的内容进行遍历,第三种 使用迭代器进行相关遍历。
LinkedList的链式线性表的特点为: 适合于在链表中间需要频繁进行插入和删除操作。随机访问速度较慢。查找一个元素需要从头开始一个一个的找。
Set接口的常见实现类有HashSet,LinedHashSet和TreeSet这三个;
HashSet的底层就是基于HashMap来实现的,HashSet中时允许出入null值的,但是在HashSet中仅仅能够存入一个null值。HashSet中存储元素的位置是固定的。
Map接口
常见实现类HashMap、TreeMap、LinkedHashMap、Properties(继承HashTable)以及老版本的HashTable
Hashtable是线程安全的,而HashMap是非线程安全的,我们可以使用外部同步的方法解决这个问题。
Array和List的区别