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

Core Java Tutorial -,corejavatutorial

来源: javaer 分享于  点击 22225 次 点评:145

Core Java Tutorial -,corejavatutorial


Java TreeSet 是 java.util.SortedSet 的最流行的实现。SortedSet 是继承 java.util.Set 的接口。Java Sorted Set 提供其元素的总排序。

Java TreeSet

换句话说,在迭代 TreeSet 时,我们可以期望排序的数据。Java TreeSet 元素按照其自然顺序排序,或者我们可以在创建 SortedSet 时提供一个 Comparator。如果我们在创建 Set 期间未提供特定的比较器,则元素必须实现 Comparable 以确保自然排序。

Java TreeSet Constructors

TreeSet 是 SortedSet 非常流行的实现。按照规范,所有 Sorted Set 实现类都应该提供 4 种类型的构造函数。

不幸的是,接口不能包含构造函数。所以,没有办法来执行这些建议。

Java TreeSet Example

现在让我们用不同的方式创建一个有序集合,如上所述,我们将看看不同的Java TreeSet 示栗。

// Create a sorted set of Integers
SortedSet<Integer> setWithNaturalOrdering = new TreeSet<>();
setWithNaturalOrdering.add(5);
setWithNaturalOrdering.add(9);
setWithNaturalOrdering.add(4);
setWithNaturalOrdering.add(2);
setWithNaturalOrdering.forEach(System.out::println);

输出结果:

2
4
5
9

Java TreeSet Comparable

现在,我们将使用 Person 类的对象创建一个有序集合。要提供自然排序 Person 类应该具有 Comparable 接口的实现。

class Person implements Comparable<Person> {
    int id;
    String name;

    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public int compareTo(Person p) {
        return this.name.compareTo(p.name);
    }

    @Override
    public String toString() {
        return this.name;
    }
}
// Create a sorted set with user defined class
SortedSet<Person> sortedSet = new TreeSet<>();
sortedSet.add(new Person(1, "Mark"));
sortedSet.add(new Person(2, "Vispi"));
sortedSet.add(new Person(3, "Harmony"));
sortedSet.forEach(System.out::println);

输出结果:

Harmony
Mark
Vispi

Java TreeSet Comparator

为了提供不同的排序,我们需要在创建 Sorted Set 时传递自定义比较器实现。栗如,让我们根据 Person 类的 id 属性进行排序。

SortedSet<Person> sortedSet = new TreeSet<>();
sortedSet.add(new Person(1, "Mark"));
sortedSet.add(new Person(2, "Vispi"));
sortedSet.add(new Person(3, "Harmony"));
sortedSet.forEach(System.out::println);

SortedSet<Person> customOrderedSet = new TreeSet<>((p1, p2) -> p1.id - p2.id);
customOrderedSet.addAll(sortedSet);
customOrderedSet.forEach(System.out::println);

输出结果:

Mark
Vispi
Harmony

Java Sorted Set Example

我们也可以通过传递另一个集合对象或不同的排序集来创建排序集。

List<Person> listOfPerson = Arrays.asList(new Person(1, "Mark"), new Person(2, "Vispi"), new Person(3, "Harmony"));
SortedSet<Person> sortedSetFromCollection = new TreeSet<>(listOfPerson);
SortedSet<Person> copiedSet = new TreeSet<>(sortedSetFromCollection);
copiedSet.forEach(System.out::println);

输出结果:

Harmony
Mark
Vispi

Java SortedSet Methods

由于 SortedSet 的排序性质,与 Set 先比,SortedSet 肯定会获得一些额外的权限。正如你可能已经猜到的那用,除了来自 Set 接口的继承方法之外,它还提供了一些其他方法。

Java SortedSet Implementation

让我们看看这些方法。我们将通过传递一个比较器来创建一个有序集合。这里 comparator() 方法将返回相同的比较器:

SortedSet<Integer> intSet = new TreeSet<>(Comparator.naturalOrder());
intSet.addAll(Arrays.asList(7, 2, 1, 4, 6, 5));
Comparator comparator = intSet.comparator();

现在,然我们使用 SubSet(from, to) 方法找到子集。请注意,对自己所做的更改也会反映到原始集上。

SortedSet<Integer> subSet = intSet.subSet(2, 5);
System.out.println(subSet);
subSet.add(3);
System.out.println(intSet);

输出:

[2, 4]
[1, 2, 3, 4, 5, 6, 7]

相似的,我们来看看别的方法:

subSet = intSet.headSet(3);
System.out.println("Head set");
System.out.println(subSet);

subSet = intSet.tailSet(3);
System.out.println("Tail set");
System.out.println(subSet);

System.out.println("Retrieving lowest and highest elements respectively");
System.out.println(intSet.first());
System.out.println(intSet.last());

输出:

Head set
[1, 2]
Tail set
[3, 4, 5, 6, 7]
Retrieving lowest and highest elements respectively
1
7

相关文章

    暂无相关文章
相关栏目:

用户点评