【Java】容器类学习之路(二)Collection详解:List、Set和Queue
2016-03-12 17:14
471 查看
先简单看一下Colleciton的结构:
可以看出,Collection下分三大接口,分别是List、Set、Queue
按照插入的顺序保存元素,List接口在Collection的基础上添加了大量方法使得程序员可以在List中间插入和移除元素。
类别:
ArrayList 底层是数组,非线程安全,只能用在单线程(多线程请用CopyOnWriteArrayList)
LinkedList 底层是双向链表
如果插入、删除的操作较多,最好使用LinkedList;如果需要大量的随机访问,最好使用ArrayList。原因在于ArrayList 底层由数组支持,LinkedList 由双向链表实现。
Set的接口和Collection完全一样,没有其他额外功能,实际上这就是一种继承和多态思想的典型应用——表现不同的行为。
类别:
SortedSet(接口)按照对象的comparator()定义的方法保证处于此种排序
TreeSet(还继承了SortedSet接口,元素必须实现Comparable接口) 基于红黑树
HashSet(最常用) 散列函数
LinkedHashSet 散列查询+链表维护插入顺序
HashSet和HashMap的区别
HashCode的机制
种类:
LinkedList:虽然名为”List“,但同时也实现了Queue接口
PriorityQueue:对象会在队列中按照优先级排序(值越小,优先级越高),有最高优先级的将会第一个被取出。
Deque:双向队列和队列基本相同,但是你可以在任何一端添加或移除元素。
在LinkedList中包含支持双向队列的方法,但是在Java标准类库中没有任何显式的用于双向队列的接口。我们可以使用组合来创建一个Deque类
可以看出,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
相关文章推荐
- UILabel补充
- jsp跳转getRequestDispatcher()和sendRedirect()的区别
- Android Stuido第五期 - 时间选择器
- iOS UIView自带动画和核心动画
- CodeForces 450B Jzzhu and Sequences
- 控件-UILabel
- [leetcode 250]Count Univalue Subtrees ------元素都相同的子树个数
- 用requestDisallowInterceptTouchEvent()方法防止viewpager和子view滑动事件冲突
- CodeForces 622A:Infinite Sequence【排列】
- Java中String、StringBuilder以及StringBuffer
- UESTC 1144 Big Brother 二分图、最大匹配
- Uva1151——Buy or Build && POJ2784——Buy or Build
- Android子线程真的不能更新UI么
- 增加bluestacks的存储空间- 4G
- MySQL - Entity : The value for column 'IsPrimaryKey' in table 'TableDetails' is DBNull
- 实现录音时随声音大小变化的UI,以及文件上传功能。
- MySQL 中BLOB/TEXT column can't have a default value query问题
- [leetcode 298] Binary Tree Longest Consecutive Sequence---求二叉树连续序列的长度
- 1014-34-首页15-计算原创微博的frame------计算cell的高度---计算 UILabel 的 CGSize 的方法
- MUI-创建子页面