欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Core Java Tutorial -,corejavatutorial

来源: javaer 分享于  点击 37965 次 点评:76

Core Java Tutorial -,corejavatutorial


Java Set 是不包含重复元素(或对象)的集合。Java Set 是一个 extends 了 Collection 接口的接口。与 List 不同,Java Set 不是一个有序集合,它的元素没有特定的顺序。Java Set 不提供可以插入元素位置的控制。你不能按照索引访问元素,也不能在列表中搜索元素。

1. Java Set

在这节,我们将讨论一些关于 Java Set 的重点:

  • Java Set 接口是 Java 集合框架的成员。
  • 与 List 不同,Set 不允许添加重复元素。
  • Set 允许你只添加一个 null 元素。
  • Set 接口在 Java 8 中有一个默认方法:spliterator。
  • 与 Like 和数组不同,Set 不支持元素的索引或位置。
  • Set 支持泛型,我们应该尽可能使用它。在集合中使用泛型将在运行时避免 ClassCastException 错误。
  • 我们可以使用 Set 接口实现来维护独特的元素。

Java Set Class Diagram

Java Set 接口集成了 Collection 接口。Collection 接口继承了 Iterable 接口。一些经常使用的 Set 实现类有:HashSetLinkedHashSetTreeSetCopyOnWriteArraySetConcurrentSkipListSetAbstractSet 提供了 Set 接口的骨架实现,以减少实现 Set 的工作量。

Java Set Methods

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

  • int size():获取 Set 中元素的数量。
  • boolean isEmpty():检查 Set 是否为空。
  • boolean contains(Object o):如果此 Set 中包含指定元素,则返回 true。
  • Iterator iterator():返回此 Set 中元素的迭代器。元素以特定顺序返回。
  • Object[] toArray():返回包含此 Set 中所有元素的数组。如果这个集合保证了它的迭代器返回的元素的顺序,这个方法必须以相同的顺序返回元素。
  • boolean add(E e):如果指定的元素不存在(可选操作),则将指定的元素添加到此 Set 中。
  • boolean remove(Object o):如果存在指定的元素(可选操作),则从该 Set 中删除指定的元素。
  • boolean removeAll(Collection c):从该 Set 中移除指定集合中包含的所有元素(可选操作)。
  • boolean retainAll(Collection c):仅保留包含在指定集合中的元素(可选操作)。
  • void clear():删除 Set 中的所有元素。
  • Iterator iterator():返回此 Set 中元素的迭代器。

Java Array to Set

不像 List,我们不能直接将 Java Array 转换成 Java Set,因为它不是使用 Array 实现的。

所以我们不能使用 Arrays 类来获得 Set 的数组试图。我们可以采用另一种方法。我们可以使用 Arrays.asList() 方法将数组转换为 List,然后使用它创建 Set。通过这种方法,我们可以通过两种方式来将 Java Array 转换成 Set。让我们来用一个简单的栗子注意讨论它们。

方法一:
这个方法,首先我们需要用给出的数组创建一个 List,然后用它创建一个 Set。如下所示:

package Set;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class ArrayToSet {
    public static void main(String[] args) {

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

        Set<String> 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);
    }
}

方法二:
在这种方法中,我们不使用中间 List 来从数值创建 Set。 首先创建一个空的 HashSet,然后使用 Collections.addAll() 将数组元素复制到给定的 Set 中,如下所示:

package Set;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

public class ArrayToSet2 {

    public static void main(String[] args) {

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

        Set<String> 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 to Array

在本节中,我们将编写一个程序,使用 Set.toArray() 方法将一组字符串转换为一个字符串数组,如下所示:

package Set;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class SetToArray {
    public static void main(String[] args) {

        Set<String> vowelsSet = new HashSet<>();

        // 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 Set Sorting

正如我们所知,Set(HashSet)不直接支持排序元素。它们以随机顺序存储和显示它的元素。

但是,我们有一些方法来对它的元素进行排序,如:

// TODO

Java Set Common Operations

在 Java Set 上执行的最常见的操作是addaddAllclearsize等。下面是一个简单的Java Set示例,显示常见的方法用法。

package Set;

import java.util.HashSet;
import java.util.Set;

public class SetCommonOperations {
    public static void main(String[] args) {
        Set<String> 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<String> 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 Set Iterator

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

package Set;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetIteratorExample {
    public static void main(String[] args) {
        Set<Integer> 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 to Stream

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

package Set;

import java.util.HashSet;
import java.util.Set;

public class SetToStream {
    public static void main(String[] args) {
        Set<String> 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 Set

在 Java SE 9 发行版中,Oracle Corp 将为 Set 接口添加一些有用的实用方法。 用一些简单而有用的例子来理解它们会更好。
请通过 “Java SE 9: Set Factory Methods”来学习它们。

相关文章

    暂无相关文章
相关栏目:

用户点评