MST

星途 面试题库

面试题:Java中Set集合如何实现数据去重

请阐述在Java中,Set集合(如HashSet、TreeSet)实现数据去重的原理,并且通过代码示例说明如何使用HashSet对一个包含重复元素的整数列表进行去重操作。
20.8万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

Set集合实现数据去重原理

  1. HashSet
    • HashSet基于哈希表实现。当向HashSet中添加元素时,首先会调用元素的hashCode()方法计算哈希码,通过哈希码可以快速定位到该元素在哈希表中的存储位置(桶)。
    • 如果该位置没有其他元素,那么直接将元素放入。如果该位置已经有元素,就会调用元素的equals()方法与该位置已有的元素进行比较。如果equals()方法返回true,说明两个元素相同,不会重复添加;如果equals()方法返回false,说明两个元素不同,会以链表(在JDK 8及以后,如果链表长度达到一定阈值会转化为红黑树)的形式将新元素添加到该位置。
  2. TreeSet
    • TreeSet基于红黑树实现。TreeSet中的元素会按照自然顺序(如果元素实现了Comparable接口)或者自定义顺序(如果在构造TreeSet时传入了Comparator)进行排序。
    • 当向TreeSet中添加元素时,会通过比较元素的顺序来判断是否重复。如果新元素与集合中已有的元素比较结果为0(即相等),则不会重复添加;否则,会将新元素插入到合适的位置以维持树的有序性。

使用HashSet对包含重复元素的整数列表进行去重操作代码示例

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class SetDeduplicationExample {
    public static void main(String[] args) {
        // 创建一个包含重复元素的整数列表
        List<Integer> listWithDuplicates = new ArrayList<>();
        listWithDuplicates.add(1);
        listWithDuplicates.add(2);
        listWithDuplicates.add(2);
        listWithDuplicates.add(3);
        listWithDuplicates.add(1);

        // 使用HashSet进行去重
        Set<Integer> set = new HashSet<>(listWithDuplicates);

        // 将去重后的结果转换回列表(如果需要)
        List<Integer> listWithoutDuplicates = new ArrayList<>(set);

        // 输出去重后的列表
        System.out.println("去重后的列表: " + listWithoutDuplicates);
    }
}