上图已经够我们日常使用了,如果想继续研究,请自行研究源码*
1、老大哥Collection
没什么好讲的,就是常用集合的老大哥 常用方法: add/addAll remove/removeAll clear contains isEmpty iterator size collections.reverse(collection)
1.1 List列表
存Value,并依存入的顺序,以某种特定顺序取出,所以是有序&可重复
- ArrayList:数组实现;非线程安全
- Vector:数组实现;线程安全,但就是因为太安全,颗粒大,所以一般不用,而用Deque来实现栈的功能
- LinkedList:链表实现;非线程安全。注意:同时也是Deque的儿子,所以也常做栈/队列使用 常用方法: add(index,object)/addAll; get; remove; set; indexOf; subList; listIterator;
1.2 Queue单端队列
功能同List,大部分内容在前面《栈、队列要点快速回顾》里已说明,这里简单回顾与介绍
常用方法:offer---add失败抛异常;poll无值就返回null---remove失败抛异常;
peek无值就返回null---element失败抛异常
- PriotityQueue:内部有比较器,无序,会自动按队列元素重新排序,创建时可传入自定义比较器
- Deque:双端队列
-
- ArrayDeque:数组实现。常做栈使用
-
- LinkedList:链表实现。常做栈使用
常用方法:除了栈、Queue的方法,还有xxxFirst/Last指定是从前/后对队列进行操作
- LinkedList:链表实现。常做栈使用
1.3 Set集
存Value,天生去重!!!所以无序&不可重复\
- HashSet:Hash表实现
- TreeSet:二叉树实现,所以会按排序。自定义的类需覆盖Comparable 接口+ compareTo()函数,Integer 和 String是可以按默认TreeSet排序的
2 Map隐射
存K-V,K不可重复,V可重复\
-
HashMap:线程不安全,允许k\v为null
-
- ConcurrentHashMap:segment分段锁(默认16个,初始化后不可扩容),每个segment都是一个HahsMap
-
HashTable:线程安全,不允许K\V为Null。不建议使用,安全用CHM,不安全用HM
-
TreeMap:底层二叉树。key必须实现Comparable 接口+ compareTo()函数,或者在 TreeMap构造函数里传自定义的Comparator+compare()函数