HashSet

HashSet

  1. 实现Set接口的hash table(哈希表),依靠HashMap来实现的;(file 1)
  2. 我们应为要存放到散列表的各个对象定义hashCode()和equals();(file 2)
  3. 散列表
    1. 散列表又称为哈希表。散列表算法的基本思想是:以结点的关键字为自变量,通过一定的函数关系(散列函数)计算出对应的函数值,以这个值作为该结点存储在散列表中的地址;
    2. 当散列表中的元素存放太满,就必须进行再散列,将产生一个新的散列表,所有元素存放在新的散列表中,原先的散列表将被删除。在Java语言中,通过负载因子(load factor)来决定何时对散列表进行再散列。例如:如果负载因子是0.75,当散列表中已经有75%的位置已经放满,那么将进行再散列;
    3. 负载因子越高(越接近1.0),内存的使用效率越高,元素的寻找时间约长。负载因子越低(越接近0.0),元素的寻找时间越短,内存浪费越多;
    4. 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值