千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > set.contains详解

set.contains详解

来源:千锋教育
发布人:xqq
时间: 2023-11-23 11:48:50 1700711330

一、set.contains介绍

set.contains()函数是Java中Set接口中的一个方法,该方法判断Set中是否包含某个元素,若包含则返回true,否则返回false。

其用法为:

Set set = new HashSet<>();
set.add(element);
boolean result = set.contains(element);

其中,element为Set中的元素,result为boolean类型的变量,用于记录Set中是否包含该元素。

二、set.contains的时间复杂度

set.contains的时间复杂度与使用的Set实现有关。对于基于哈希表的实现,如HashSet和LinkedHashSet,其平均时间复杂度为O(1);对于基于红黑树的实现,如TreeSet,其平均时间复杂度为O(log n)。

在实际应用中,选用适当的Set实现能够达到更好的性能。

三、set.contains与equals的关系

set.contains的判断依赖于元素的hashCode以及equals函数的返回值。如果两个元素的hashCode相同,但equals函数返回值不同,则判断这两个元素相等的结果是错误的。

为了避免此类问题,程序员需要确保重写了元素类的equals函数,保证元素相等的判断符合自己的需求。

例如,对于一个Person类:

class Person {
    private String name;
    private int age;
    //... 
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

在使用Set时,如果只重写了hashCode函数而没有重写equals函数,则set.contains()很可能会判断出两个元素不相等,即使它们在业务上应该是相等的。

四、set.contains的使用场景

set.contains的常见使用场景包括:

判断集合中是否包含指定元素 对于删除、修改等操作,先使用set.contains判断操作元素是否存在 对于数据量比较大的List,可以先将List中的元素加入set中,再使用set.contains实现快速查找

五、set.contains的应用举例

以下代码展示了如何使用set.contains实现两个字符串的交集:

public Set intersection(String s1, String s2) {
    Set set1 = new HashSet<>();
    Set set2 = new HashSet<>();
    for (char c : s1.toCharArray()) {
        set1.add(c);
    }
    for (char c : s2.toCharArray()) {
        set2.add(c);
    }
    Set result = new HashSet<>();
    for (char c : set1) {
        if (set2.contains(c)) {
            result.add(c);
        }
    }
    return result;
}

其中,set1和set2分别表示两个字符串中各个字符集合,用set.contains计算它们的交集,最终返回一个Set类型的结果。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT