Java 中 Set 类型的使用方法

简介: 【10月更文挑战第30天】Java中的`Set`类型提供了丰富的操作方法来处理不重复的元素集合,开发者可以根据具体的需求选择合适的`Set`实现类,并灵活运用各种方法来实现对集合的操作和处理。

Java中的Set是一个接口,它继承自Collection接口,用于存储不重复的元素集合。

创建Set对象

  • 使用具体实现类创建:Java中Set接口有多种实现类,常见的有HashSetTreeSetLinkedHashSet等。可以使用这些实现类的构造函数来创建Set对象。

    • HashSet:基于哈希表实现,不保证元素的顺序,添加、删除和查找操作的性能较好。

      Set<Integer> hashSet = new HashSet<>();
      hashSet.add(1);
      hashSet.add(2);
      hashSet.add(3);
      System.out.println(hashSet);
      
    • TreeSet:基于红黑树实现,会对元素进行排序,元素必须实现Comparable接口或者在创建TreeSet时传入自定义的比较器。

      Set<Integer> treeSet = new TreeSet<>();
      treeSet.add(3);
      treeSet.add(1);
      treeSet.add(2);
      System.out.println(treeSet);
      
    • LinkedHashSet:继承自HashSet,在哈希表的基础上维护了一个双向链表,保证元素按照插入的顺序存储。
      Set<Integer> linkedHashSet = new LinkedHashSet<>();
      linkedHashSet.add(2);
      linkedHashSet.add(1);
      linkedHashSet.add(3);
      System.out.println(linkedHashSet);
      

添加元素

  • 使用add()方法向Set中添加元素。如果添加的元素已经存在于Set中,则添加操作不会生效,因为Set不允许重复元素。
    Set<String> set = new HashSet<>();
    set.add("apple");
    set.add("banana");
    set.add("cherry");
    set.add("apple"); 
    System.out.println(set);
    

删除元素

  • 可以使用remove()方法根据元素的值删除元素,如果元素存在则删除并返回true,否则返回false
Set<Integer> setToRemove = new HashSet<>();
setToRemove.add(1);
setToRemove.add(2);
setToRemove.add(3);

setToRemove.remove(2);
System.out.println(setToRemove);
  • 还可以使用clear()方法一次性删除Set中的所有元素,使Set变为空集合。
Set<String> setToClear = new HashSet<>();
setToClear.add("one");
setToClear.add("two");
setToClear.add("three");

setToClear.clear();
System.out.println(setToClear);

遍历Set

  • 可以使用增强型for循环遍历Set中的元素。
Set<String> fruits = new HashSet<>();
fruits.add("apple");
fruits.add("banana");
fruits.add("cherry");

for (String fruit : fruits) {
   
    System.out.println(fruit);
}
  • 也可以使用迭代器Iterator来遍历Set
Set<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);

Iterator<Integer> iterator = numbers.iterator();
while (iterator.hasNext()) {
   
    System.out.println(iterator.next());
}

判断元素是否存在

  • 使用contains()方法来判断Set中是否包含指定的元素,返回truefalse
Set<Double> setContains = new HashSet<>();
setContains.add(1.1);
setContains.add(2.2);
setContains.add(3.3);

System.out.println(setContains.contains(2.2));  
System.out.println(setContains.contains(4.4));

集合运算

  • 交集:使用retainAll()方法可以求两个Set的交集,该方法会保留当前Set中与另一个Set中相同的元素,返回值为truefalse,表示当前Set是否发生了改变。
Set<Integer> set1 = new HashSet<>();
set1.add(1);
set1.add(2);
set1.add(3);
Set<Integer> set2 = new HashSet<>();
set2.add(3);
set2.add(4);
set2.add(5);

set1.retainAll(set2);
System.out.println(set1);
  • 并集:先创建一个新的Set,将其中一个Set的元素添加进去,然后再使用addAll()方法将另一个Set的元素添加到新的Set中,得到两个Set的并集。
Set<Integer> unionSet1 = new HashSet<>(set1);
unionSet1.addAll(set2);
System.out.println(unionSet1);
  • 差集:使用removeAll()方法可以求两个Set的差集,从当前Set中移除与另一个Set中相同的元素。
Set<Integer> differenceSet1 = new HashSet<>(set1);
differenceSet1.removeAll(set2);
System.out.println(differenceSet1);  

Set<Integer> differenceSet2 = new HashSet<>(set2);
differenceSet2.removeAll(set1);
System.out.println(differenceSet2);

注意事项

  • HashSet在存储自定义对象时,需要注意重写hashCode()equals()方法,以确保正确地判断元素的重复性。如果不重写这两个方法,默认的判断方式可能无法满足需求,导致集合中出现不符合预期的重复元素。
  • TreeSet在存储元素时,元素必须是可比较的,即实现Comparable接口或者在创建TreeSet时传入自定义的比较器,否则会抛出ClassCastException异常。

总之,Java中的Set类型提供了丰富的操作方法来处理不重复的元素集合,开发者可以根据具体的需求选择合适的Set实现类,并灵活运用各种方法来实现对集合的操作和处理。

相关文章
|
15天前
|
存储 算法 Java
Java Set深度解析:为何它能成为“无重复”的代名词?
Java的集合框架中,Set接口以其“无重复”特性著称。本文解析了Set的实现原理,包括HashSet和TreeSet的不同数据结构和算法,以及如何通过示例代码实现最佳实践。选择合适的Set实现类和正确实现自定义对象的hashCode()和equals()方法是关键。
25 4
|
15天前
|
Java
那些与Java Set擦肩而过的重复元素,都经历了什么?
在Java的世界里,Set如同一位浪漫而坚定的恋人,只对独一无二的元素情有独钟。重复元素虽屡遭拒绝,但通过反思和成长,最终变得独特,赢得了Set的认可。示例代码展示了这一过程,揭示了成长与独特性的浪漫故事。
20 4
|
15天前
|
Java 开发者
Java Set:当“重复”遇见它,秒变“独宠”!
在Java编程中,Set接口确保集合中的元素不重复,每个元素都是独一无二的“独宠”。本文介绍了Set的两种常见实现:HashSet和TreeSet。HashSet基于哈希表实现,提供高效的添加、删除和查找操作;TreeSet基于红黑树实现,不仅去重还能对元素进行排序。通过示例代码,展示了这两种集合的具体应用,帮助开发者更好地理解和使用Set。
22 4
|
22天前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
20天前
|
存储 Java 开发者
Java Set:无序之美,不重复之魅!
在Java的集合框架中,Set接口以其“无序之美”和“不重复之魅”受到开发者青睐。Set不包含重复元素,不保证元素顺序,通过元素的hashCode()和equals()方法实现唯一性。示例代码展示了如何使用HashSet添加和遍历元素,体现了Set的高效性和简洁性。
28 4
|
20天前
|
存储 算法 Java
为什么Java Set如此“挑剔”,连重复元素都容不下?
在Java的集合框架中,Set是一个独特的接口,它严格要求元素不重复,适用于需要唯一性约束的场景。Set通过内部数据结构(如哈希表或红黑树)和算法(如哈希值和equals()方法)实现这一特性,自动过滤重复元素,简化处理逻辑。示例代码展示了Set如何自动忽略重复元素。
25 1
|
20天前
|
存储 算法 Java
Java中的Set,你真的了解它的“无重复”奥秘吗?
在Java的广阔天地里,Set以其独特的“无重复”特性,在众多数据结构中脱颖而出。本文将揭秘Set的“无重复”奥秘,带你领略其魅力。Set通过哈希算法和equals()方法协同工作,确保元素不重复。通过一个简单的案例,我们将展示HashSet如何实现这一特性。
27 1
|
22天前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
22天前
|
Java 开发者
|
Oracle Java 关系型数据库
我的Java开发学习之旅------&gt;解惑Java进行三目运算时的自动类型转换
今天看到两个面试题,居然都做错了。通过这两个面试题,也加深对三目运算是的自动类型转换的理解。 题目1.以下代码输出结果是()。 public class Test { public static void main(String[] args) { int a=5; System.
1027 0