java基础之集合类
2016-04-30 19:56
387 查看
java集合主要由两个接口派生而出:Collection和Map,也就是说Collection和Map是所有集合类的根接口。Iterator也是集合框架的成员,用来遍历Collection集合
无序
多线程中,两个货以上线程操作一集合,需要程序员手工保证同步
值可为null
HashSet如何保证每次添加的元素不重复?
调用HashCode()方法获得该对象的hashcode,看集合中是否有相同的hashcode,如果有,则表示该对象在集合中已存在;如果没有,则可以插入。
LinkedHashSet
与HashSet相似,也是用hashcode来决定存放位置,不同之处在于LinkedHashSet使用链表来维护元素的次序,因此插入到LinkedHashSet中的元素是有序的,顺序在链表中维护。
1、Object first():获取第一个元素
2、Object last():获取最后一个元素
3、Object lower():获取指定元素之前的元素。
4、。。。。。请看源码~
排序方式
1、自然排序
用compareTo(来自comparable接口)方法比较元素大小按升序排序
2、定制排序
即自定义排序方式,可以用lamda表达式来代替Comparable接口
hashset,因为treeset的顺序需要进行大小比较后才能确定,而hashset省去了这一步。
hashset与linkedhashset的性能呢?
当然是hashset,因为linkedHashSet还需要维护链表哦~
vector方法是jdk1.0的时候就有的古老的方法,当时没有考虑到系统的集合框架,所以它提供了很多方法名很长的方法,后来用List替代了,其实和现在用的List并没有区别。而且Vector是线程安全的,因此性能会低,因为它对当前线程加锁,其他只能等待。
ArrayList是线程不安全的,需要程序员手动保证集合同步
从上面的源码可以看出它实现了List还实现了Deque,因此它具有栈和队列的双重特点。
排序方式
自然排序
定制排序
key-value,Map的key类似一个Set集合、value类似List集合可以重复。
学习之旅刚开始,再接再厉~~~
Collection接口
Set
无序集合,且元素不可重复,可以说Set就是Collection,只是行为略有不同,即元素不能重复HashSet
特点无序
多线程中,两个货以上线程操作一集合,需要程序员手工保证同步
值可为null
HashSet如何保证每次添加的元素不重复?
调用HashCode()方法获得该对象的hashcode,看集合中是否有相同的hashcode,如果有,则表示该对象在集合中已存在;如果没有,则可以插入。
LinkedHashSet
与HashSet相似,也是用hashcode来决定存放位置,不同之处在于LinkedHashSet使用链表来维护元素的次序,因此插入到LinkedHashSet中的元素是有序的,顺序在链表中维护。
TreeSet
是sortedSet的实现类,可以确保元素处于排序状态。因为它的这个特点,因此它相比hashSet增加如下方法:1、Object first():获取第一个元素
2、Object last():获取最后一个元素
3、Object lower():获取指定元素之前的元素。
4、。。。。。请看源码~
排序方式
1、自然排序
用compareTo(来自comparable接口)方法比较元素大小按升序排序
2、定制排序
即自定义排序方式,可以用lamda表达式来代替Comparable接口
EnumSet
通过枚举值来决定Set顺序Set性能
hashSet与treeSet谁的性能好?hashset,因为treeset的顺序需要进行大小比较后才能确定,而hashset省去了这一步。
hashset与linkedhashset的性能呢?
当然是hashset,因为linkedHashSet还需要维护链表哦~
List
有序集合,元素可重复,根据索引来操作集合,所以可以达到有序的效果。ArrayList和vector
arrayList和vector都是基于数组的,所以他们都分配了一个动态的、允许再分配的Object[]数组。vector方法是jdk1.0的时候就有的古老的方法,当时没有考虑到系统的集合框架,所以它提供了很多方法名很长的方法,后来用List替代了,其实和现在用的List并没有区别。而且Vector是线程安全的,因此性能会低,因为它对当前线程加锁,其他只能等待。
ArrayList是线程不安全的,需要程序员手动保证集合同步
LinkedList
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable
从上面的源码可以看出它实现了List还实现了Deque,因此它具有栈和队列的双重特点。
Queue
队列,“先进先出”,即队列的头部存放时间最长,尾部存放时间最短Deque
Queue的实现类,是“双端队列“,即两头可以同时怎删数据。Priority
Queue的实现类,按队列元素的大小进行排序排序方式
自然排序
定制排序
Map接口
key-value,Map的key类似一个Set集合、value类似List集合可以重复。
HashTable与HashMap
HashTable从jdk1.0开始就有,是线程安全的,性能较低,而HashMap则与前者相反,所以需要程序员手动使集合同步。LinkedHashMap
笔者感受
Map和Set非常相似,只不过Map是key-value形式的,所以Map处不再赘述。hashset用了map中的key来存放e,因为key可以保证不重复,这样去掉了原始set在存数据之前需要用hashcode进行去重比较的问题,提高了效率学习之旅刚开始,再接再厉~~~
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树