HashSet
来源:互联网 发布:爱因斯坦 以色列 知乎 编辑:程序博客网 时间:2024/06/06 09:38
HashSet
- 实现Set接口的hash table(哈希表),依靠HashMap来实现的;(file 1)
- 我们应为要存放到散列表的各个对象定义hashCode()和equals();(file 2)
- 散列表
- 散列表又称为哈希表。散列表算法的基本思想是:以结点的关键字为自变量,通过一定的函数关系(散列函数)计算出对应的函数值,以这个值作为该结点存储在散列表中的地址;
- 当散列表中的元素存放太满,就必须进行再散列,将产生一个新的散列表,所有元素存放在新的散列表中,原先的散列表将被删除。在Java语言中,通过负载因子(load factor)来决定何时对散列表进行再散列。例如:如果负载因子是0.75,当散列表中已经有75%的位置已经放满,那么将进行再散列;
- 负载因子越高(越接近1.0),内存的使用效率越高,元素的寻找时间约长。负载因子越低(越接近0.0),元素的寻找时间越短,内存浪费越多;
- HashSet类的缺省负载因子是0.75;
## file 1 ##import java.util.*;class HashSetTest{ public static void main(String[] args){ HashSet hs = new HashSet(); hs.add("one"); hs.add("two"); hs.add("three"); hs.add("one"); Iterator it = hs.iterator(); while(it.hasNext()){ System.out.println(it.next());// two one three // 可以看出hash不固定顺序,不允许重复 } }}## file 2 ##import java.util.*;class HashSetTest{ public static void main(String[] args){ HashSet hs = new HashSet(); hs.add(new Students(12,"zhangsan")); hs.add(new Students(14,"lisi")); hs.add(new Students(11,"wangwu")); hs.add(new Students(12,"zhangsan")); Iterator it = hs.iterator(); while(it.hasNext()){ System.out.println(it.next()); } }}class Students{ int num; String name; Students(int num,String name){ this.num = num; this.name = name; } public String toString(){ return "num="+num+";"+"name="+name; } // 如果不重写hashCode、equals,对象就不会去重; public int hashCode(){ return num * name.hashCode(); } public boolean equals(Object o){ Students s = (Students)o; return num == s.num && name.equals(s.name); }}
0 0
- HashSet
- Hashset
- HashSet
- HashSet
- HashSet
- HashSet
- HashSet
- HashSet
- HashSet
- HashSet
- HashSet
- HashSet
- HashSet
- HashSet
- HashSet
- HashSet
- hashset
- HashSet
- 怎样让插入Excel的图片不能移动
- Angular4学习笔记(七):界面优化
- 文件目录管理-RHCEday1
- 题目1134:密码翻译
- 使用JavaScript修改伪类样式的方法总结
- HashSet
- 使用Git Bash对VS工程进行版本控制
- mvc+EF+easyui 分页控件使用方法
- 购物车 sdut3869
- LeetCode (6)ZigZag Conversion
- 关于VS2017缺少头文件的解决办法
- 函数指针与指针函数(转载)
- 相机标定概念性问题
- Java线程:大总结