Java HashSet 散列集合


HashSet

  • 扩展 AbstractSet 并实现 Set 接口,创建一个使用 散列表(哈希表)存储的类集,而散列表通过被称作散列法的机制来存储信息;
  • 存储的元素是不可重复的,并且元素都是无序的(即存取顺序不能保证不一致);
  • 散列法:一个关键字的信息内容被用来确定唯一的一个值,称为散列码(hashCode),散列码被用来当做与关键字相连的数据的存储下标,关键字到其散列码是自动执行的,因此看不到散列码本身,代码也不能直接索引散列表,大的集合也能使 add(),contains(),remove(),size() 等方法的运行时间不变;
  • HashSet 调用元素时会调用 hashCode() 方法,获得其哈希码(hashCode),根据哈希码确定在集合中的存储位置,提高了存储速度;
  • HashSet 不能确定元素的排列顺序,通常无法干预排列集合的创建,如果要排序,建议使用 TreeSet
  • java.util.HashSet,详见:Class HashSet

1. 构造方法

构造方法说明
HashSet()构造一个空的 Set 集合
HashSet(Collection c)构造一个包含指定集合的元素的集合
HashSet(int capacity)构造一个指定初始容量的 Set 集合
HashSet(int capacity, float fillRatio)指定容量与填充比(又称加载容量,负载因子),填充比必须介于 0.0 与 1.0 之间,决定散列集合向上调整大小之前有多少被填满,当元素个数大于 散列表容量 x 填充比 时,散列集合被扩大,默认值是 0.75

2. 去除重复元素的原理

  • HashSet 是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存储和查找性能。保证元素唯一性的方式依赖于:hashCode() 与 equals() 方法;
  • 下图是原理简析,详见:Java 哈希表

HashSet去重原理


3. 类的使用

import java.util.HashSet;
import java.util.Iterator;

public class test {
    public static void main(String[] args) {
        HashSet<String> hs = new HashSet<>();
        hs.add("12");
        hs.add("34");
        hs.add("56");
        hs.add("12");
        System.out.println(hs.size());//输出3
        Iterator it = hs.iterator();
        while (it.hasNext()) {
            System.out.print(it.next() + " ");//输出12 34 56 
        }
        System.out.println();
        for (String name : hs) {
            System.out.print(name + " ");//输出12 34 56 
        }
    }
}

4. 源码分析


5. 应用

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值