集合初探(八)
2016-01-22 13:47
183 查看
package com.liujunhua.it02; import java.util.HashSet; import java.util.Iterator; /** * set:就是集合,元素不可以重复,而且是无序的(指的是存入和取出的顺序不一定一致)。 * HashSet:底层数据结构是哈希表 * HashSet是如果保证元素的唯一性呢? * 它是通过元素的两个方法,hashCode和equals来完成的。 * 如果元素的hashcode值相同,才会判断equals是否为true * 如果元素的hashcode值不相同,不会调用equals方法。 * * 注意:对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。 * * 往HashSet集合中存入自定义对象。 * 姓名和年龄相同为同一个人,即为重复元素。 */ public class Demo01 { public static void main(String[] args) { HashSet hs = new HashSet(); hs.add(new Person("a1", 1)); hs.add(new Person("a2", 2)); hs.add(new Person("a3", 3)); hs.add(new Person("a4", 4)); hs.add(new Person("a1", 1)); hs.add(new Person("a2", 2)); hs.add(new Person("a3", 3)); hs.add(new Person("a4", 4)); Iterator it = hs.iterator(); while (it.hasNext()) { Person p = (Person) it.next(); System.out.println(p.getName()+"---------"+p.getAge()); } } } class Person{ private String name; private int age; Person(String name, int age){ this.name = name; this.age = age; } /*********************比较特殊的方法--父类的方法**************************/ //每一个对象都有自己的hash值,就是内存中的存储地址 public int hashCode(){ //17这个值可以任意 return name.hashCode()+age*17; } /*********************比较特殊的方法--父类的方法**************************/ //equals是定义在Object类中的方法,创建的每一个对象都具有该方法,可根据自身的比较特点对该方法进行覆写 public boolean equals(Object obj){ if(!(obj instanceof Person)) return false; Person p = (Person) obj; System.err.println(this.name+"*********"+p.name); return this.name.equals(p.name) && this.age == p.age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
相关文章推荐
- Linux IO 多路复用详解
- Redis和Memcache对比及选择
- visibility和display的区别
- 写了一个小说大纲,可是没时间去完善
- Andorid获取本地电话的方法
- [Unity3D] 战场电视屏幕抖动扭曲Shader
- 数据结构学习之链表
- js之执行环境(作用域)与作用域链深入剖析3
- java ftp相关的异常汇总
- 扑克类的实现
- jar打包成exe,或者服务进行运行
- ECharts 柱状图
- 【PHP进阶篇】3.类与面向对象--慕课网【学习总结】
- 大数据(十三) - Azkaban
- 2 - Add Two Numbers
- error: declaration may not appear after executable statement in block
- [Unity3D] 5.0 图集合并扩展工具,用于解决UGUI与AssetBundle打包造成资源包过大的问题
- 数据结构学习之顺序表(二)
- Spring+MVC项目发布停止
- DirectX的error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4,该符号在函数 "long __cdecl InitD3D(struct HWND__ *)"