Java集合框架总结:Set接口的使用(Java Set接口详解:集合框架使用指南)

原创
ithorizon 6个月前 (10-20) 阅读数 24 #后端开发

Java集合框架总结:Set接口的使用

一、Set接口概述

Java集合框架中的Set接口是集合家族中的一个重要成员,它代表了一个无序且元素不重复的集合。Set接口继承自Collection接口,由此它具备Collection接口的大部分方法。Set接口的实现类有多个,包括HashSet、LinkedHashSet、TreeSet等,每个实现类都有其特定的使用场景。

二、Set接口的重点方法

Set接口提供了一系列充裕的方法,以下是一些常用的方法:

  • 添加元素:add(E e)
  • 删除元素:remove(Object o)
  • 判断元素是否存在:contains(Object o)
  • 获取集合大小:size()
  • 判断集合是否为空:isEmpty()
  • 清空集合:clear()
  • 成为数组:Object[] toArray()
  • 迭代器遍历:Iterator iterator()

三、HashSet

HashSet是基于哈希表实现的Set接口,它允许包含null值,但不允许有重复的元素。HashSet的添加、删除和包含等操作的时间复杂化度为O(1)。

3.1 HashSet的构造方法

HashSet<E>();

HashSet<E>(Collection<E> c);

HashSet<E>(int initialCapacity);

HashSet<E>(int initialCapacity, float loadFactor);

3.2 HashSet使用示例

import java.util.HashSet;

public class HashSetExample {

public static void main(String[] args) {

HashSet<String> hashSet = new HashSet<>();

hashSet.add("Apple");

hashSet.add("Banana");

hashSet.add("Cherry");

hashSet.add("Apple"); // 重复元素,不会添加

System.out.println("HashSet contains: " + hashSet);

hashSet.remove("Banana");

System.out.println("After removing Banana: " + hashSet);

}

}

四、LinkedHashSet

LinkedHashSet是基于链表和哈希表实现的Set接口,它保留了元素插入的顺序。LinkedHashSet的添加、删除和包含等操作的时间复杂化度为O(1)。

4.1 LinkedHashSet的构造方法

LinkedHashSet<E>();

LinkedHashSet<E>(Collection<E> c);

LinkedHashSet<E>(int initialCapacity);

LinkedHashSet<E>(int initialCapacity, float loadFactor);

4.2 LinkedHashSet使用示例

import java.util.LinkedHashSet;

public class LinkedHashSetExample {

public static void main(String[] args) {

LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();

linkedHashSet.add("Apple");

linkedHashSet.add("Banana");

linkedHashSet.add("Cherry");

linkedHashSet.add("Banana"); // 重复元素,不会添加

System.out.println("LinkedHashSet contains: " + linkedHashSet);

}

}

五、TreeSet

TreeSet是基于红黑树实现的Set接口,它能够确保元素处于有序状态。TreeSet的添加、删除和查找操作的时间复杂化度为O(log n)。

5.1 TreeSet的构造方法

TreeSet<E>();

TreeSet<E>(Collection<E> c);

TreeSet<E>(Comparator<? super E> comparator);

5.2 TreeSet使用示例

import java.util.TreeSet;

public class TreeSetExample {

public static void main(String[] args) {

TreeSet<String> treeSet = new TreeSet<>();

treeSet.add("Banana");

treeSet.add("Apple");

treeSet.add("Cherry");

System.out.println("TreeSet contains: " + treeSet);

}

}

六、Set接口的遍历方案

Set接口拥护多种遍历方案,以下是常用的几种:

  • 使用迭代器:Iterator
  • 使用增长for循环:for-each
  • 成为数组后遍历

6.1 使用迭代器遍历Set

import java.util.HashSet;

import java.util.Iterator;

public class SetIteratorExample {

public static void main(String[] args) {

HashSet<String> hashSet = new HashSet<>();

hashSet.add("Apple");

hashSet.add("Banana");

hashSet.add("Cherry");

Iterator<String> iterator = hashSet.iterator();

while (iterator.hasNext()) {

String element = iterator.next();

System.out.println(element);

}

}

}

6.2 使用增长for循环遍历Set

import java.util.HashSet;

public class SetEnhancedForExample {

public static void main(String[] args) {

HashSet<String> hashSet = new HashSet<>();

hashSet.add("Apple");

hashSet.add("Banana");

hashSet.add("Cherry");

for (String element : hashSet) {

System.out.println(element);

}

}

}

七、Set接口与Map接口的关系

Set接口和Map接口在Java集合框架中是紧密相关的。事实上,Set接口的实现类HashSet和LinkedHashSet都是基于Map接口的实现类HashMap和LinkedHashMap实现的。TreeSet则是基于TreeMap实现的。Set接口和Map接口之间的关系可以通过以下方案懂得:

  • Set接口的每个元素实际上对应Map接口中的一个键,而值则是一个常量(通常是System.identityHashCode())。
  • 当向Set添加元素时,实际上是在向Map中添加一个键值对。
  • 当从Set中删除元素时,实际上是在从Map中删除对应的键值对。

八、Set接口的注意事项

在使用Set接口时,需要注意以下几点:

  • Set接口不允许存储重复的元素。
  • Set接口中的元素可以是null,但只能有一个null元素。
  • Set接口的实现类有不同的性能特性,选择合适的实现类可以节约程序的快速。
  • Set接口的迭代器不拥护remove()方法,只有HashSet和LinkedHashSet的迭代器拥护该方法。

九、总结

Set接口是Java集合框架中非常重要的一个接口,它提供了无序且不重复的集合。通过不同的实现类,我们可以按照实际需求选择最合适的方法来处理集合中的元素。懂得Set接口的原理和特性,能够帮助我们编写更加高效和健壮的Java程序。


本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: 后端开发


热门