HashSet ,作为Set集合的一个实现类,很多书中写到Set中不能存放重复的元素。事实上并非如此。看下面的一个简短的例子
import java.util.*;
class AddObject {
int hashCode;
public AddObject(int hashCode) {
this.hashCode = hashCode;
}
public int hashCode() {
return hashCode;
}
}
public class TestHashSet {
public static void main(String args[]) {
// set在存储数据时需要遍历之前所存放的数据(hashCode与内存地址),用于与当前所要添加的元素进行对比。若得出结果相等,
// 则不添加。比较的方法是:首先比较两个对象的hashCode,如果不相等,则直接添加;否则,再用equals()(比较地址)
// 方法进行比较,如果结果返回为true,则不添加;否则,添加
Set<AddObject> set = new HashSet<AddObject>();
// 设置初始hashCode值
AddObject ao = new AddObject(2);
// 第一次添加
set.add(ao);
// 重新设置hashCode
ao.hashCode = 3;
// 再次添加
set.add(ao);
System.out.println(set.size());
// 输出结果显然是2。但两次添加的对象显然是同一个对象,所以Set中不能存放重复的元素这一说法是不完善的
}
}
TreeSet:一个有序的Set(一般为升序)·,它是通过compareTo()这个函数来判断所添加的数据是否已经存在和排序
import java.util.*;
class A implements Comparable {
public int compareTo(Object o) {
// 返回值为0时,表示两个对象相等不可以添加;否则添加成功
return 1;
}
}
public class TestTreeSet {
public static void main(String[] args) {
TreeSet<A> ts = new TreeSet<A>();
A a = new A();
A b = new A();
// 进行添加时,调用compareTo()方法进行比较。一来判断是否重复;二来,是为了排序
ts.add(a);
ts.add(b);
System.out.println(ts.size());
}
}
分享到:
相关推荐
HashSet和TreeSet_围墙之外.rar
HashSet和TreeSet的区别
NULL 博文链接:https://elvin-chu.iteye.com/blog/1942033
treemap treeset hashset hashmap 简要介绍
主要介绍了详解Java中HashSet和TreeSet的区别的相关资料,需要的朋友可以参考下
主要介绍了HashSet和TreeSet使用方法的区别解析,具有一定借鉴价值,需要的朋友可以参考下
主要介绍了从源码的角度浅析HashMap、TreeMap元素的存储和获取元素的逻辑;从Map与Set之间的关系浅析常用的Set中元素的存储和判断是否重复的逻辑,需要的朋友可以参考下
简单的说,HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值相 等注意,如果要把一个对
HashSet是按照哈希算法进行存储元素的,具有良好的查询和存取性能。 HashSet特点 集合元素值可以为null; 不保证元素的排列顺序,有可能排列顺序与添加顺序不同; 非同步集合,多线程访问HashSet时,是不安全的...
day18-集合-中(HashSet&TreeSet&比较器).zip
比较遗憾的是,TreeSet 虽然实现起来也比较简单,但它有着和 HashSet 一样的问题,会自动排序 5:LinkedHashSet去重(有序) 从代码和执行结果可以看出,LinkedHashSet 是到目前为止,实现比较简单,且最终生成的新...
HashTable不支持空键值对! 而HashMap支持空键值对!
java HashSet 集合排序,需要通过利用TreeSet集合排序。2013-10-30。
自己写的例子,关于HashSet遍历和HashMap遍历的. 感谢大家参考
HashSet的实现原理 ,HashSet与HashMap的区别 以及 HashSet的底层实现方式
Set接口的实现类包括HashSet、LinkedHashSet和TreeSet。 HashSet是基于哈希表实现的Set集合,它不保证集合中元素的顺序。由于哈希表的实现机制,HashSet的添加、删除和查找操作都具有很好的性能,时间复杂度为O(1)。...
Java数据结构--13.Java8数据结构TreeSet 前⾔ ,上⼀篇中对 Set 接⼝最终实现类 HashSet 与 LinkedHashSet 做了介绍与分析,本篇将对另⼀种 Set 接⼝的最终实现类 TreeSet 进⾏ 介绍与分析。 先来看下 TreeSet 完整...
简述了HashSet去重原理
HashSet 是一个没有重复元素的集合。 它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用 null 元素。 HashSet是非同步的。如果多个线程同时访问一个哈希 set,而其中至少一个线程修改了该 set,那么它...