HashMap和HashSet、hashcode
来源:互联网 发布:中国网络日报有无权威 编辑:程序博客网 时间:2024/05/20 06:26
在Java中集合除了有Collection
还有Map
。
Collection包括:List(ArrayList、LinkedList、Vector)、Queue、Set
Map包括:HashMap、HashTable、TreeMap、WeakHashMap。
HashMap
线程不安全
Map<String,String> map = new HashMap<String,String >(); map.put("name","zhangsan"); map.put("name","jack"); // 同一个key,后面的会覆盖前面的 System.out.println(map.get("name")); // 遍历集合 map.put("age","19"); Set<String> set = map.keySet(); // 使用map.keySet()来遍历 for (String s : set){ System.out.println(s); // 打印key值 }
也是在import java.util.*
包里。
HashSet
Set<String> set = new HashSet<String>(); set.add("jack");
的内部也是调用的HashMap
的方法,可以说没有HashMap就没有HashSet。
与HashMap不同的地方:
set.add("jack"); //相同的值不会再加入 set.add("jack"); //相同的值不会再加入
相同的字符串不会再次加入,所以只有一个”jack”值存在。
那么添加对象呢?
set.add(new Product(101,"java")); set.add(new Product(102,"php")); set.add(new Product(101,"java")); for (Product p :set){ System.out.println(p.getId()+"=="+p.getName()); }
尝试添加3个Product
对象,其中2个对象数据是相同的,但还是添加进去了。
因为对象的内存地址是不同的。
hashCode
是通过一定的算法计算出一个散列值。
上面3个Product对象,其最后的hashCode值是不一样的,这个hashCode
值是用来作为key保存HashSet的add()
方法的数据的。
更多内部原理,可以去看源码。^_^
看了源码我们知道,如果要判断2个对象内容是否相等,可以重写2个方法。
我们重写Product
类下面2个方法:
@Override public int hashCode() { return (this.getName()+String.valueOf(this.getId())).hashCode(); } @Override public boolean equals(Object obj) { Product product = (Product)obj; if (this.getId()==product.getId() && this.getName().equals(product.getName())){ return true; } return false; }
现在加入相同的数据,就不会重复了:
Set<Product> set = new HashSet<Product>(); set.add(new Product(101,"java")); set.add(new Product(102,"php")); set.add(new Product(101,"java")); for (Product p :set){ System.out.println(p.getId()+"=="+p.getName()); //打印: // 102==php //101==java }
阅读全文
0 0
- HashMap和HashSet、hashcode
- hashmap和hashset的理解,关于hashcode和equals。
- Hashset、Hashmap、Hashtable与hashcode()和equals()的密切关系
- HashMap和HashSet的HashCode()使用测试实例
- == 和 equals,equals 与 hashcode,HashSet 和 HashMap,HashMap 和 Hashtable
- hashCode和hashSet
- HashMap HashSet hashCode() 之间的联系
- HashMap和HashSet中hashCode()和equals()方法重写的问题
- ArrayList和HashSet和hashcode
- Arraylist和linkedlist的区别,hashmap和hashtable的区别,hashmap和hashset的相同与不同,hashcode的用法
- HashSet 、HashMap 和 HashTable
- Hashtable、HashMap和HashSet
- HashSet和HashMap
- hashmap和hashset区别
- hashSet和hashmap
- HashMap和HashSet详解
- 【javaSE】HashSet和HashMap
- HashSet和HashMap
- C++11:std::move和std::forward
- 汇编中定义栈段
- 数据结构实验之查找五:平方之哈希表
- css实现九宫格布局以及边框效果
- 在Qt中 调用 Tesseract,配置 C++ API
- HashMap和HashSet、hashcode
- TeamViewer---Linux远程控制利器
- 实习期间相关工作总结
- selenium +chrome headless Manual 模式渲染网页
- 每天一点积累(三)--mysql存储引擎
- iOS安全–使用static inline方式编译函数,防反编译
- 如何修改手机在PC桌面右下角弹出的“MT65xx Android Phone”提示框
- Java POI读取Excel 2003/2007/2010例子
- 基于JS实现回到页面顶部的五种写法(从实现到增强)