集合一网打尽

139 阅读2分钟

图片1.png

上图已经够我们日常使用了,如果想继续研究,请自行研究源码*

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指定是从前/后对队列进行操作

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()函数