Collection & set
2015-07-26 23:03
197 查看
package test; import java.util.HashSet; import java.util.Iterator; public class HashDemo { /** * |--set :元素是无序的(存入和取出的顺序不一定一致),元素不可以重复 * |--HashSet:底层数据结构是哈希表 * HashSet是如何保证元素唯一性的呢? * 通过元素的两个方法,hashCode和equals来完成 * 如果元素的hashCode值相同,才会判断equals是否为true * 如果元素的hashCode值不同,不会调用equals * 对于判断元素是否存在,以及删除等操作,依赖的方法是元素 的hashCode(先)和equals(后)方法 * (ArrayList 依赖的是equals方法) * |--TreeSet: */ public static void main(String[] args) { HashSet hs = new HashSet(); sop(hs.add(new Person("a1","11")));//true add方法返回类型是 boolean sop(hs.add(new Person("a2","12")));//true sop(hs.add(new Person("a3","13")));//true Iterator it =hs.iterator(); while(it.hasNext()){ Person p =(Person)it.next(); sop(p.getName()+"||"+p.getAge()); } /* a1--hashcode--30561568 true a2--hashcode--30571569 true a3--hashcode--30581570 true a2--hashcode--30571569 a2|euqals|12 false a3||13 a1||11 a2||12 */ sop(hs.contains(new Person("a1","11"))); /* a1--hashcode--30561568 a1|euqals|11 true */ sop(hs.remove(new Person("a2", "12"))); /* a2--hashcode--30571569 a2|euqals|12 true */ } public static void sop (Object obj){ System.out.println(obj); } }
class Person { private String name; private String age; Person(String name,String age){ this.name=name; this.age=age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } /**对象复写hashcode和俄equals方法*/ public boolean equals(Object obj){ if(!(obj instanceof Person)){ return false; } Person p =(Person)obj; System.out.println(this.name+"|euqals|"+this.age); return this.name.equals(p.name); } public int hashCode(){ System.out.println(this.name+"--hashcode--"+ name.hashCode()+age.hashCode()); return name.hashCode()+age.hashCode(); } }
相关文章推荐
- set 命令特殊用法
- You must SET PASSWORD before executing this statement的解决方法
- 批处理 Set 命令详解 让你理解set命令第1/2页
- ASP中set与dim的区别(自己的理解)
- 深入C#中get与set的详解
- sql Set IDENTITY_INSERT的用法
- set_include_path在win和linux下的区别
- jquery中常用的SET和GET
- 大家注意vector, list, set, map成员函数erase
- 基于SQL中SET与SELECT赋值的区别详解
- mysql之set与enum的介绍
- php set_magic_quotes_runtime() 函数过时解决方法
- MySQL的FIND_IN_SET函数使用方法分享
- .net get set用法小结第1/3页
- mysqli_set_charset和SET NAMES使用抉择及优劣分析
- asp.net get set用法第1/2页
- Java集合类中文介绍
- Mysql中的find_in_set的使用方法介绍
- PHP使用方法重载实现动态创建属性的get和set方法
- 网络之美 JavaScript中Get和Set访问器的实现代码