Java集合深入学习--HashSet与TreeSet
2015-08-19 16:21
706 查看
Set特点:集合中不允许有重复对象
HashSet:
一个基于HashMap的Set实现。其中,所有的值为“假值”(同一个Object对象,具备和HashMap同样的性能。基于这个特性,这个数据结构会消耗更多不必要的内存。
Set中允许添加null对象。
使用HashSet需要定义元素对象的hashCode()和equals()方法,分别用来生成哈希码和比较对象是否相同。如果不自定义这两个方法,会调用Object的方法,实现如下:
public native int hashCode();
public boolean equals(Object obj) {
return (this == obj);
}hashCode是调用其他语言库实现的,equals方法直接比较两个对象的引用是否是同一个。
向HashSet中添加对象时,会调用这两个方法,只有当两者都相同时才会判断为相同元素。HashSet的存储方式在HashMap中叙述。
由于哈希的存在,HashSet无法保存元素的存入顺序,HashSet也不能对其中的元素进行排序。
EnumSet:
值为枚举类型的Set。Java的每一个enum都映射成一个不同的int。这就允许使用BitSet——一个类似的集合结构,其中每一比特都映射成不同的enum。EnumSet有两种实现,RegularEnumSet——由一个单独的long存储(能够存储64个枚举值,99.9%的情况下是够用的),JumboEnumSet——由long[]存储。
BitSet:
一个比特Set。需要时常考虑用BitSet处理一组密集的整数Set(比如从一个预先知道的数字开始的id集合)。这个类用 long[]来存储bit。
LinkedHashSet:
继承了HashSet,这个类基于LinkedHashMap实现。这是唯一一个保持了插入顺序的Set。具体描述见LinkedHashMap。
TreeSet:
这是一个基于TreeMap的实现,这是在单线程部分唯一一个排序的Set。具体描述见TreeMap。
相关链接:Java集合学习--HashMap,HashTable,LinkedHashMap系列
HashSet:
一个基于HashMap的Set实现。其中,所有的值为“假值”(同一个Object对象,具备和HashMap同样的性能。基于这个特性,这个数据结构会消耗更多不必要的内存。
public boolean add(E e) { return map.put(e, PRESENT)==null; }PRESENT为HashSet中静态常量,所有HashSet元素的value值都指向一个Object对象。
Set中允许添加null对象。
使用HashSet需要定义元素对象的hashCode()和equals()方法,分别用来生成哈希码和比较对象是否相同。如果不自定义这两个方法,会调用Object的方法,实现如下:
public native int hashCode();
public boolean equals(Object obj) {
return (this == obj);
}hashCode是调用其他语言库实现的,equals方法直接比较两个对象的引用是否是同一个。
向HashSet中添加对象时,会调用这两个方法,只有当两者都相同时才会判断为相同元素。HashSet的存储方式在HashMap中叙述。
由于哈希的存在,HashSet无法保存元素的存入顺序,HashSet也不能对其中的元素进行排序。
Entry(int h, K k, V v, Entry<K,V> n) { value = v; next = n; key = k; hash = h; }
EnumSet:
值为枚举类型的Set。Java的每一个enum都映射成一个不同的int。这就允许使用BitSet——一个类似的集合结构,其中每一比特都映射成不同的enum。EnumSet有两种实现,RegularEnumSet——由一个单独的long存储(能够存储64个枚举值,99.9%的情况下是够用的),JumboEnumSet——由long[]存储。
BitSet:
一个比特Set。需要时常考虑用BitSet处理一组密集的整数Set(比如从一个预先知道的数字开始的id集合)。这个类用 long[]来存储bit。
LinkedHashSet:
继承了HashSet,这个类基于LinkedHashMap实现。这是唯一一个保持了插入顺序的Set。具体描述见LinkedHashMap。
TreeSet:
这是一个基于TreeMap的实现,这是在单线程部分唯一一个排序的Set。具体描述见TreeMap。
相关链接:Java集合学习--HashMap,HashTable,LinkedHashMap系列
相关文章推荐
- 用java下载网页
- Struts2配置json的各个属性
- Windows下Java JDK8配置环境变量
- Java集合学习--HashMap、LinkedHashMap、TreeMap、HashTable
- spring事务管理总结
- Java实现打印功能-AWT Graphics2D
- java Map集合类
- Java的层次结构
- java对象内存结构
- 打印2的n次方数字三角形
- java 回调的使用
- 杭电 HDU 1402 A * B Problem Plus JavaJ大数
- java concurrent包自带线程池和队列详细讲解
- struts2 和 ajax的交互
- Win10系统 JDK环境变量配置方法
- Java内存泄露例子
- java并发编程-Executor框架
- 我的eclipse插件推荐
- MyBatis <set>标签的使用
- 如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例