生活随笔
收集整理的这篇文章主要介绍了
【转】HashSet的用法
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
原文网址:http://blog.csdn.net/aidesudi/article/details/4720201
Java代码
public class TestHashSet { public static void main(String [] agrs){ Set set = new HashSet(); //添加一个string数据 set.add("文本"); //添加一个整数数据 set.add(new Integer(5)); //添加一个付点数据 set.add(12.15); //输出集合大小 System.out.println(set.size()); //在添加个相同的文本 set.add("文本"); //输出大小 System.out.println(set.size()); //添加个null值 set.add(null); //输出集合大小 System.out.println(set.size()); //再添加个null值 set.add(null); //输出集合大小 System.out.println(set.size()); //判断是否存在null值 System.out.println(set.contains(null)); // 删除null值 set.remove(null); //判断是否存在null值 System.out.println(set.contains(null)); //输出集合大小 System.out.println(set.size()); Set set1 = new HashSet(); UserInfo user = new UserInfo("abc","123"); UserInfo user1 = new UserInfo("abc","123"); set1.add(user); System.out.println(set1.size()); //判断是否存在user1这个对象 System.out.println(set1.contains(user1)); user.setName("xyz"); user.setPassword("aaa"); //在更改了user值后user1还存在吗? System.out.println(set1.contains(user1)); } } public class UserInfo { private String name; private String password; private int HASHCODE= Integer.MIN_VALUE; public UserInfo(String name,String password){ this.name = name; this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int hashCode() { if (HASHCODE == Integer.MIN_VALUE) { // 重新生成本类的hashCode HASHCODE = name.hashCode() + password.hashCode(); } return HASHCODE; } //判断值是否相等 public boolean equals(Object obj) { if(obj == null || !(obj instanceof UserInfo)){ return false; } UserInfo user = (UserInfo)obj; return this.name == user.name && this.password == user.password; } } 从上面的简单添加,和输出结果我想大家已经知道了set的一些用法和特性了。
1. HashSet允许null值。
2. HashSet中值不能重复。
3. Hashset在判断是否存在同一个对象的时候首先会判断对象的hashcode是否相等,然后在判断对象的equals()是否相等。当你向HashSet中存入重复元素时,他会按照正常的流程执行存入操作
底层的数据结构采用的是数组+链表的存储结构(明白这一点对于理解HashSet的原理非常重要),
也就是说数组中的每一个元素都是一个链表(对应java中的List的某一具体实现),
这样当有元素要存入HashSet中时,便会首先通过hashCode()方法得到该对象的一个哈希码,并利用该哈希码通过一些转换算法映射成数组的下标索引(当查找时也是如此,因此会非常的快),接下来便会判断该下标处是否为null若为null则会创建一个列表,此时将待插入的对象直接插入,若列表已经存在则利用equals()方法将带插入对象与列表中的元素逐个比较,相等则忽略,不存在相等元素则直接插入。
因此不同对象的hashCode()是可以相同的(最好是均匀的散列开,这样才能充分的提高访问及插入的速度),
根据equals()判定相等的对象所产生的hashCode()必须相等(根据其原理不难理解,否则的话便会有重复元素出现了)
保证一点 hashCode()与equals()必须能够唯一的确定一个对象。
转载于:https://www.cnblogs.com/wi100sh/p/4485508.html
总结
以上是生活随笔为你收集整理的【转】HashSet的用法的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。