HashSet 是一个Set,也就是所谓的集合。集合的概念是元素在集合中无序、唯一。无序对于计算机来说没有什么意义,因为计算机总要按照一定的顺序存储对象。它不保证集合的迭代顺序;唯一是怎么实现的呢?名字上说的已经很清楚了。HashSet,就是通过其中的元素(对象)的hashconde来区分对象是否唯一的。所以,HashSet的对象中维护着一个集合中所有对象的hashcode的list,每次执行set.add(obj)的时候,都会取出obj的hashcode与其内部的list进行比较,如果list中不存在与之相等的值,就加到set里去,同时把那个obj的hashcode加到list里去;如果有相等的,接着调用obj的equals方法与集合中各个对象进行比较,如果都返回false,就加入到set里面去,反之就不执行加入操作。
/**
*
*/
package thread;
import java.util.ArrayList;
import java.util.Iterator;
/**
* @author chunfeng.zhu
*
* 2008-7-16-下午03:46:01
*/
public class TestAdd {
ArrayList hashcodeList = new ArrayList();
ArrayList valueList = new ArrayList();
/**
*
*/
public TestAdd() {
// TODO Auto-generated constructor stub
}
private boolean add(final Object object) {
int hashcode = object.hashCode();
if (!hashcodeList.contains(hashcode)) {// 如果hashcode不存在
hashcodeList.add(hashcode);
valueList.add(object);
return true;
} else {
// 依次比较各个现有对象是否与object equals
for (Iterator iterator = valueList.iterator(); iterator.hasNext();) {
Object tempObject = (Object) iterator.next();
if (object.equals(tempObject)) {
return false; // equals的话直接返回为false
}
}// 找不到equals的话,加入list
valueList.add(object);
return true;
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
分享到:
相关推荐
HashSet的实现原理 ,HashSet与HashMap的区别 以及 HashSet的底层实现方式
简述了HashSet去重原理
这个是关于java语言的hashset集合类的一些基本用法和详解了个方法的使用
对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,查看 HashSet 的源代码,可以看到如下代码:
java HashSet 集合排序,需要通过利用TreeSet集合排序。2013-10-30。
hashSet底层去重原理
HashSetHashSetHashSetHashSetHashSetHashSetHashSetHashSetHashSet
treemap treeset hashset hashmap 简要介绍
Set是java中一个不包含重复元素的collection。更正式地说,set 不包含满足e1....HashSet与TreeSet都是基于Set接口的实现类。其中TreeSet是Set的子接口SortedSet的实现类。Set接口及其子接口、实现类的结构如下所示。
HashSet 是一个没有重复元素的集合。 它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用 null 元素。 HashSet是非同步的。如果多个线程同时访问一个哈希 set,而其中至少一个线程修改了该 set,那么它...
Qt4.8.5 Bug Patch File
源码分析见我博文:http://blog.csdn.net/wabiaozia/article/details/50684556
20220424-笔记-HashSet扩容机制
自己写的例子,关于HashSet遍历和HashMap遍历的. 感谢大家参考
HashSet 是 Java 中的一个集合类,它实现了 Set 接口并提供了...非线程安全:HashSet 类本身不是线程安全的,在多线程环境下需要进行外部同步操作,或者使用 Collections.synchronizedSet 方法封装成线程安全的集合。
c++一个用vector实现java的HashSet集合类,可以将任何类,数字,字符串,vector等等存放到里面
随机数,HsahSet,排序,输出.随机数,HsahSet,排序,输出.
此方法的实现代码较为简洁,但缺点是 HashSet 会自动排序,这样新集合的数据排序就和原集合不一致了 4:TreeSet去重(无序) 比较遗憾的是,TreeSet 虽然实现起来也比较简单,但它有着和 HashSet 一样的问题,会自动...
由HashSet谈重用
HashTable不支持空键值对! 而HashMap支持空键值对!