java提供了一套完整的容器类:List,Set,Queue,Map。
按照用途的不同将其划分为两个概念,Collection 和 Map
- Collection :一个独立元素的序列,这些元素服从一条或者多条规则。List 必须按照插入顺序保存元素;Set 不能有重复元素;Queue 按照排队规则来确定对象产生的顺序。
- map:一组成对的“键值对”对象,允许使用键来查找值。这种映射关系使得我们能够通过一个对象来查找另一个对象。
List
两种类型的List,它们实现了List的接口
ArrayList,比较适合适合随机访问元素,但是在List中间插入和移除元素比较慢。
LinkedList,比较适合中间进行插入和删除操作,提供了优化的顺序访问,但是随机访问比较慢。
初始化
List<T> list=new ArrayList<T>();
List<T> list=new LinkedList<T>();
Set
Set 不保存重复的元素,都是唯一的。如果识图将相同的对象的多个实例添加到Set中,那么它就会阻止这种重复现象。Set的接口和Collection的完全一样。Set不保证维护元素的次序。
HashSet 为快速查找而设计的Set。存入HashSet的元素必须定义hashCode()
LinkedHashSet 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入顺序)。因此,在使用迭代器遍历Set时,结果会按元素插入的次序显示。元素也必须定义hashCode()
Map
Map 基本思想是映射表(也称为关联数组),通过维护键值关系,通过键来查找值。
HashMap Map基于散列表实现(它取代了HashTable)。插入和查询键值对的开销是固定的。可以通过构造器设置容量和负载因子,以调整容器的性能。LinkedHashMap 类似于HashMap,但是迭代遍历它时,取得键值对的顺序是其插入顺序。只比HashMap慢一点,而在迭代访问时反而更快,因为他使用链表维护内部次序。
TreeMap 基于红黑树的实现。查看键或者键值对时,它们会被排序(次序由Comparable或 Comparator决定)。TreeMap的特点是所得到的结果是排序的。Treemap是唯一带有subMap()方法的的Map,它可以返回一个子树。
WeakHashMap 弱键(weak key)映射,允许释放映射所指的对象;这是为了解决某类特殊问题而设计的。如果映射之外没有指向某个键,则此键可以被垃圾回收器回收。
ConcurrentHashMap 一种线程安全的Map,它不涉及同步加锁
IdentityHashMap 使用 == 代替equals() 对键进行比较的散列映射。