Welcome
admin
admin

2025-10-09 15:32:49

游戏下载
5576 735

Java 集合

在这个部分,我们将讨论关于Java Set的一些重要要点。

Java Set interface is a member of the Java Collections Framework.

Unlike List, Set DOES NOT allow you to add duplicate elements.

Set allows you to add at most one null element only.

Set interface got one default method in Java 8: spliterator.

Unlike List and arrays, Set does NOT support indexes or positions of it’s elements.

Set supports Generics and we should use it whenever possible. Using Generics with Set will avoid ClassCastException at runtime.

We can use Set interface implementations to maintain unique elements.

Java Set类的类图

Java的集合方法

在本节中,我们将讨论一些有用的Java Set方法。

获取集合中元素的数量。

检查集合是否为空。

如果集合包含指定的元素,则返回true。

返回一个迭代器,用于遍历集合中的元素。元素的返回顺序没有特定的顺序。

返回一个包含集合中所有元素的数组。如果集合对元素的迭代器返回顺序有任何保证,那么该方法必须以相同的顺序返回元素。

如果指定的元素不存在于集合中,则将其添加到集合中(可选操作)。

如果指定的元素存在于集合中,则将其从集合中删除(可选操作)。

从集合中删除包含在指定集合中的所有元素(可选操作)。

仅保留集合中包含在指定集合中的元素(可选操作)。

从集合中删除所有元素。

返回一个迭代器,用于遍历集合中的元素。

Java数组转换为集合

与List不同,我们无法直接将Java的Set转换为数组,因为它不是使用数组实现的。因此,我们不能使用Arrays类来获取数组作为集合的视图。我们可以采取另一种方法。我们可以使用Arrays.asList()方法将数组转换为List,然后使用它来创建一个Set。通过使用这种方法,我们可以用两种方式将Java数组转换为Set。让我们逐一讨论它们,使用一个简单的例子来说明第一种方法。在这种方法中,首先我们需要使用给定的数组创建一个List,然后使用它来创建一个Set,如下所示。

import java.util.*;

public class ArrayToSet {

public static void main(String[] args) {

String[] vowels = {"a","e","i","o","u"};

Set vowelsSet = new HashSet>(Arrays.asList(vowels));

System.out.println(vowelsSet);

/**

* Unlike List, Set is NOt backed by array,

* so we can do structural modification without any issues.

*/

vowelsSet.remove("e");

System.out.println(vowelsSet);

vowelsSet.clear();

System.out.println(vowelsSet);

}

}

第二种方法是在这个方法中,我们不使用中间列表来从数组创建一个集合。首先创建一个空的哈希集,然后使用Collections.addAll()将数组元素复制到给定的集合中,如下所示。

import java.util.*;

public class ArrayToSet2 {

public static void main(String[] args) {

String[] vowels = {"a","e","i","o","u"};

Set vowelsSet = new HashSet<>();

Collections.addAll(vowelsSet, vowels);

System.out.println(vowelsSet);

/**

* Unlike List, Set is NOt backed by array,

* so we can do structural modification without any issues.

*/

vowelsSet.remove("e");

System.out.println(vowelsSet);

vowelsSet.clear();

System.out.println(vowelsSet);

}

}

当我们运行上述两个程序时,我们将获得与下面所示的相同的输出结果。

[a, e, u, i, o]

[a, u, i, o]

[]

将Java的Set转换为数组。

在这个部分,我们将编写一个程序,使用Set.toArray()方法将一组字符串转换为字符串数组。

import java.util.*;

public class SetToArray {

public static void main(String[] args) {

Set();

// add example

vowelsSet.add("a");

vowelsSet.add("e");

vowelsSet.add("i");

vowelsSet.add("o");

vowelsSet.add("u");

//convert Set to Array

String strArray[] = vowelsSet.toArray(new String[vowelsSet.size()]);

System.out.println(Arrays.toString(strArray));

}

}

运行以上程序时,我们将得到如下所示的输出。

[a, e, u, i, o]

Java集合排序

我们都知道,集合(HashSet)不能直接支持对元素进行排序。它存储并以随机顺序显示其元素。然而,我们有一些方法来对其元素进行排序,如下所示:

import java.util.*;

public class SetSortingExample {

public static void main(String[] args) {

Set intsSet = new HashSet<>();

Random random = new Random();

for (int i = 0; i {return (o2-o1);});

System.out.println("Reverse Sorting: " + intsList2);

// Approach-3

Set sortedSet = new TreeSet<>(intsSet);

System.out.println("Sorted Set: " + sortedSet);

}

}

当我们运行上述程序时,我们将会看到如下的输出结果。

[560, 864, 176, 657, 135, 103, 40, 123, 555, 589]

Natural Sorting: [40, 103, 123, 135, 176, 555, 560, 589, 657, 864]

Before Sorting: [560, 864, 176, 657, 135, 103, 40, 123, 555, 589]

Reverse Sorting: [864, 657, 589, 560, 555, 176, 135, 123, 103, 40]

Sorted Set: [40, 103, 123, 135, 176, 555, 560, 589, 657, 864]

Java集合的常见操作

Java Set 上最常见的操作是 add、addAll、clear、size 等。下面是一个简单的 Java Set 示例,展示了常见的方法用法。

import java.util.*;

public class SetCommonOperations

{

public static void main(String args[])

{

Set vowels= new HashSet<>();

//add example

vowels.add("A");

vowels.add("E");

vowels.add("I");

//We cannot insert elements based on index to a Set

System.out.println(vowels);

Set set = new HashSet<>();

set.add("O");

set.add("U");

//appending set elements to letters

vowels.addAll(set);

System.out.println(vowels);

//clear example to empty the set

set.clear();

//size example

System.out.println("letters set size = " + vowels.size());

vowels.clear();

vowels.add("E"); vowels.add("E");vowels.add("I"); vowels.add("O");

System.out.println("Given set contains E element or not? = " + vowels.contains("E"));

}

}

结果:

[A, E, I]

[A, E, U, I, O]

letters set size = 5

Given set contains E element or not? = true

Java的集合迭代器

下面是一个简单的示例,展示了如何迭代遍历Java的Set集合。

import java.util.*;

public class SetIteratorExample

{

public static void main(String[] args)

{

Set set = new HashSet<>();

for(int i=0; i<5; i++)

set.add(i);

Iterator iterator = set.iterator();

//simple iteration

while(iterator.hasNext()){

int i = (int) iterator.next();

System.out.print(i + ", ");

}

System.out.println("\n" + set);

//modification of set using iterator

iterator = set.iterator();

while(iterator.hasNext()){

int x = (int) iterator.next();

if(x%2 ==0) iterator.remove();

}

System.out.println(set);

//changing set structure while iterating

iterator = set.iterator();

while(iterator.hasNext()){

//ConcurrentModificationException here

int x = (int) iterator.next();

if(x==1) set.add(10);

}

}

}

将 Java 的 Set 转换为 Stream。

下面是一个简单的例子,展示了如何将Java Set转换为流,并根据我们的需求执行一些操作。

import java.util.*;

public class SetToStream {

public static void main(String[] args) {

Set vowelsSet = new HashSet<>();

// add example

vowelsSet.add("a");

vowelsSet.add("e");

vowelsSet.add("i");

vowelsSet.add("o");

vowelsSet.add("u");

//convert set to stream

vowelsSet.stream().forEach(System.out::println);

}

}

产出:

a

e

u

i

o

Java SE 9 集合

在Java SE 9版本中,Oracle Corp将向Set接口添加一些实用的工具方法。最好通过一些简单实用的示例来理解它们。请阅读我在“Java SE 9:Set Factory Methods”上的教程来学习它们。这就是对Java中Set的快速概述。我希望这些Java Set示例能帮助您入门Set集合编程。感谢您阅读我的教程。如果您喜欢我的教程,或者有任何问题、建议或任何类型的错误,请给我留言。