【Java】容器类学习之路(二)Collection详解:List、Set和Queue

时间:2021-10-22 16:21:10

先简单看一下Colleciton的结构:
【Java】容器类学习之路(二)Collection详解:List、Set和Queue
可以看出,Collection下分三大接口,分别是List、Set、Queue

1.List

  • 特点:
    按照插入的顺序保存元素,List接口在Collection的基础上添加了大量方法使得程序员可以在List中间插入和移除元素。
  • 类别:
    • ArrayList 底层是数组,非线程安全,只能用在单线程(多线程请用CopyOnWriteArrayList)
    • LinkedList 底层是双向链表
      如果插入、删除的操作较多,最好使用LinkedList;如果需要大量的随机访问,最好使用ArrayList。原因在于ArrayList 底层由数组支持,LinkedList 由双向链表实现。

2.Set

  • 特点:不保存重复的元素,常用于测试归属性。因此,实现Set接口就要实现equals()方法来保证对象的唯一性,Set本身不保证维护存储顺序。
    Set的接口和Collection完全一样,没有其他额外功能,实际上这就是一种继承和多态思想的典型应用——表现不同的行为。
  • 类别:
    • SortedSet(接口)按照对象的comparator()定义的方法保证处于此种排序
    • TreeSet(还继承了SortedSet接口,元素必须实现Comparable接口) 基于红黑树
    • HashSet(最常用) 散列函数
    • LinkedHashSet 散列查询+链表维护插入顺序
  • HashSet和HashMap的区别

  • HashCode的机制

3.Queue

  • 特点:Queue是一种满足”先进先出“的容器,即放入的顺序和取出的顺序相同。由于可以可靠地将对象从程序的一个区域传输到另一个区域,因此在并发编程中特别重要。
  • 种类:
    • LinkedList:虽然名为”List“,但同时也实现了Queue接口
    • PriorityQueue:对象会在队列中按照优先级排序(值越小,优先级越高),有最高优先级的将会第一个被取出。
    • Deque:双向队列和队列基本相同,但是你可以在任何一端添加或移除元素。
      在LinkedList中包含支持双向队列的方法,但是在Java标准类库中没有任何显式的用于双向队列的接口。我们可以使用组合来创建一个Deque类

4.已过时的Vector/Hashtable/Stack