您的位置:首页 > 产品设计 > UI/UE

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

2016-03-12 17:14 471 查看
先简单看一下Colleciton的结构:



可以看出,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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: