Java容器框架源码阅读笔记(零)Collection、Map

Java容器中共有两个接口,分别是CollectionMapCollection用于存放多个 “单个对象” ,而Map用于存放多个 “两个对象(键值对)”

Collection

java.uti.Collection框架:
Collection接口架构图

介绍

Collection是存放单个对象的容器。 Collection里只能存放对象,不能存放基本类型。对于基本类型(boolean, int, long, float, double),需要将其包装成对象类型后(Boolean, Integer, Long, Float, Double)才能放到容器里,不过编译器已经帮我们完成了打包和解包的操作。所以可以直接写list.add(1),而不用list.add(Integer.valueOf(1))

List

  • ArrayList: 基于数组实现的可变数组,非线程安全。
  • Vector: 和ArrayList类似,区别是通过synchronized实现了线程安全,但效率较低。
  • LinkedList: 双向链表

Queue

Set

  • HashSet: 基于HashMap实现的集合。元素的遍历顺序和插入顺序不一致
  • LinkedHashSet: 基于LinkedHashMap实现的集合。元素的遍历顺序和插入顺序一致
  • TreeSet: 基于TreeMap实现的集合。元素有序的,顺序是按照key的自然顺序或者是定义的Comparator

Map

java.uti.Map框架:
Map接口

介绍

Map是存放键值对的容器

  • HashMap:基于数组、链表、红黑树实现的键值对类型的数据结构,非线程安全。元素的遍历顺序和插入顺序不一致
  • HashTable:和HashMap类似,但是线程安全,不过效率较低,不建议使用。建议用ConcurrentHashMapCollections.synchronizedMap(new HashMap())代替。
  • LinkedHashMap:基于HashMapLinkedList实现的Map。可以实现元素遍历顺序和插入顺序一致。也可以实现元素的遍历顺序和访问顺序一致
  • TreeMap:基于红黑树实现的Map,元素有序的,顺序是按照key的自然顺序或者是定义的Comparator
  • WeakHashMap:WeakHashMap也是一种Map,其中的Entry可以JVM自动清除释放。其余的操作和HashMap相同,不过没有用到红黑树。