Set集合的hashset实现类的三大特点

Java中的Set接口是Collection接口的一个子接口,它代表了一个不允许有重复元素的集合。Set接口的实现类,如HashSetLinkedHashSetTreeSet等,都遵循这一核心原则,但它们在内部实现、性能特点、排序行为等方面有所差异。不过,就Set集合的通用特性而言,可以总结为以下三大特点:

1、不允许有重复的元素

add()方法,如果当前元素是第一次添加返回true,相反则返回false。

原理:HashSet不允许集合中存在重复的元素。这是通过元素的hashCode()和equals()方法来实现的。当尝试向HashSet中添加一个新元素时,HashSet会首先计算该元素的hashCode值,以确定它在哈希表中的位置。如果哈希表中已经存在具有相同hashCode值的元素,则HashSet会进一步调用这些元素的equals()方法来检查它们是否相等。如果equals()方法返回true,则表明集合中已经存在该元素,添加操作将失败(即元素不会被添加到集合中)。

代码演示如下:

 //1.创建一个Set集合的对象
        Set<String> s = new HashSet<>();

        boolean s1 = s.add("s");
        boolean s2 = s.add("s");

        System.out.println(s1);//true
        System.out.println(s2);//false

2、存取无序

原理:HashSet不保证集合中元素的迭代顺序。当你遍历HashSet时,元素的返回顺序可能与它们被添加到集合中的顺序不同。这是因为HashSet底层使用哈希表(HashMap)来存储元素,而哈希表并不保证元素的顺序。

代码演示如下:

//存取无序
    public static void main(String[] args) {
        //创建
        Set<String> s=new HashSet<>();

        s.add("张三");
        s.add("李四");
        s.add("王五");

        System.out.println(s);//  result: [李四,张三,王五]

3、没有索引:

如上图所示,当调用set集合的get方法时显示无索引。

此外,值得注意的是,HashSet允许存储null元素,这是它与某些其他集合实现(如TreeSet)不同的地方。然而,由于HashSet的无序性和不重复性,它并不适合用于需要排序或频繁进行元素查找操作的场景。在这些情况下,可能需要考虑使用其他类型的集合,如LinkedHashSet(保持元素添加顺序)或TreeSet(对元素进行排序)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值