Table of Contents
ToggleTreeSet in Java with Examples
如果要使元素保持排序狀態,則 TreeSet 應該是主要選擇,因為可以按升序或降序訪問和遍歷,並且升序操作和視圖的性能可能比降序的操作和視圖更快,提供避免重複和排序元素的能力,與 HashSet 相比, TreeSet 的性能較低,是一個非同步的操作,TreeSet in Java 介紹常見的 entrySet 、 forEach 、 toArray 等方法,本篇增加了範例,並透過單元測試來驗證產出結果。
檔案目錄
./
+- src
+- test
| +- org
| +- ruoxue
| +- java_147
| +- set
| +- treeset
| +- TreeSetWithExamplesTest.java
單元測試
TreeSet Java 提供循環訪問、轉成陣列等操作 Set 中的元素。
forEach
TreeSet Java 建立一個 TreeSet ,內有三個元素,迴圈取得元素。
@Test
public void forEach() {
Set<String> set = new TreeSet<String>();
set.add("Longan");
set.add("Tomato");
set.add("Pear");
set.forEach(e -> System.out.println(e));
}
Longan
Pear
Tomato
forEach
TreeMap Java 建立一個 TreeMap ,內有三個元素,迴圈取得元素。
@Test
public void forEach() {
Map<Fruit, Integer> map = new TreeMap<>();
map.put(new Fruit("Grape", 1, 1), 1);
map.put(new Fruit("Lemon", 3, 1), 3);
map.put(new Fruit("Kiwifruit", 2, 1), 2);
map.forEach((k, v) -> System.out.println(k + ", " + v));
}
{"name":"Grape","quantity":1.0,"type":1}, 1
{"name":"Kiwifruit","quantity":2.0,"type":1}, 2
{"name":"Lemon","quantity":3.0,"type":1}, 3
forEachRemaining
TreeSet Java 建立一個 TreeSet ,內有三個元素,迴圈取得剩餘元素。
@Test
public void forEachRemaining() {
Set<String> set = new TreeSet<>();
set.add("Longan");
set.add("Tomato");
set.add("Pear");
Iterator<String> it = set.iterator();
int i = 0;
while (it.hasNext()) {
System.out.println(it.next());
if (i == 1) {
break;
}
i++;
}
System.out.println("----------");
it.forEachRemaining(e -> {
System.out.println(e);
});
}
Longan
Pear
----------
Tomato
iterator
Java TreeSet 建立一個 TreeSet ,內有三個元素,迴圈取得元素。
@Test
public void iterator() {
Set<String> set = new TreeSet<>();
set.add("Longan");
set.add("Tomato");
set.add("Pear");
Iterator<String> it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
Longan
Pear
Tomato
spliterator
Java TreeSet 建立一個 TreeSet ,內有三個元素,使用 spliterator 取得元素,等同於 iterator.hasNext 和 iterator.next。
@Test
public void spliterator() {
Set<String> set = new TreeSet<>();
set.add("Longan");
set.add("Tomato");
set.add("Pear");
Spliterator<String> sit = set.spliterator();
sit.tryAdvance(e -> System.out.println(e));
System.out.println("----------");
sit.forEachRemaining(e -> System.out.println(e));
System.out.println("----------");
sit = set.spliterator();
while (sit.tryAdvance(e -> System.out.println(e))) {
}
}
Longan
----------
Pear
Tomato
----------
Longan
Pear
Tomato
trySplit
Java TreeSet 建立一個 TreeSet ,內有三個元素,使用 spliterator 取得元素,trySplit 將目前的拆分器分為兩個新的拆分器並行處理。
@Test
public void trySplit() {
Set<String> set = new TreeSet<>();
set.add("Longan");
set.add("Tomato");
set.add("Pear");
Spliterator<String> sit = set.spliterator();
Spliterator<String> sit2 = sit.trySplit();
System.out.println(sit.getExactSizeIfKnown());
sit.forEachRemaining(e -> System.out.println(e));
System.out.println("----------");
System.out.println(sit2.getExactSizeIfKnown());
sit2.forEachRemaining(e -> System.out.println(e));
}
-1
Pear
Tomato
----------
-1
Longan
toArray
Java TreeSet 建立一個 TreeSet ,內有三個元素,轉換成 String 陣列。
@Test
public void toArray() {
int expectedSize = 3;
Set<String> set = new TreeSet<String>();
set.add("Longan");
set.add("Tomato");
set.add("Pear");
String[] array = new String[set.size()];
set.toArray(array);
for (String e : array) {
System.out.println(e);
}
assertEquals(expectedSize, array.length);
}
Longan
Pear
Tomato
streamToArray
Java TreeSet 建立一個 TreeSet ,內有三個元素,使用 stream ,轉換成 String 陣列。
@Test
public void streamToArray() {
int expectedSize = 3;
Set<String> set = new TreeSet<String>();
set.add("Longan");
set.add("Tomato");
set.add("Pear");
String[] array = set.stream().toArray(String[]::new);
for (String e : array) {
System.out.println(e);
}
assertEquals(expectedSize, array.length);
}
Longan
Pear
Tomato
TreeSetWithExamplesTest.java
TreeSet in Java 新增單元測試,驗證是否符合預期。
package org.ruoxue.java_147.set.treeset;
import static org.junit.Assert.*;
import java.util.TreeSet;
import java.util.Iterator;
import java.util.Set;
import java.util.Spliterator;
import org.junit.Test;
public class TreeSetWithExamplesTest {
@Test
public void forEach() {
Set<String> set = new TreeSet<String>();
set.add("Longan");
set.add("Tomato");
set.add("Pear");
set.forEach(e -> System.out.println(e));
}
@Test
public void forEachRemaining() {
Set<String> set = new TreeSet<>();
set.add("Longan");
set.add("Tomato");
set.add("Pear");
Iterator<String> it = set.iterator();
int i = 0;
while (it.hasNext()) {
System.out.println(it.next());
if (i == 1) {
break;
}
i++;
}
System.out.println("----------");
it.forEachRemaining(e -> {
System.out.println(e);
});
}
@Test
public void iterator() {
Set<String> set = new TreeSet<>();
set.add("Longan");
set.add("Tomato");
set.add("Pear");
Iterator<String> it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
@Test
public void spliterator() {
Set<String> set = new TreeSet<>();
set.add("Longan");
set.add("Tomato");
set.add("Pear");
Spliterator<String> sit = set.spliterator();
sit.tryAdvance(e -> System.out.println(e));
System.out.println("----------");
sit.forEachRemaining(e -> System.out.println(e));
System.out.println("----------");
sit = set.spliterator();
while (sit.tryAdvance(e -> System.out.println(e))) {
}
}
@Test
public void trySplit() {
Set<String> set = new TreeSet<>();
set.add("Longan");
set.add("Tomato");
set.add("Pear");
Spliterator<String> sit = set.spliterator();
Spliterator<String> sit2 = sit.trySplit();
System.out.println(sit.getExactSizeIfKnown());
sit.forEachRemaining(e -> System.out.println(e));
System.out.println("----------");
System.out.println(sit2.getExactSizeIfKnown());
sit2.forEachRemaining(e -> System.out.println(e));
}
@Test
public void toArray() {
int expectedSize = 3;
Set<String> set = new TreeSet<String>();
set.add("Longan");
set.add("Tomato");
set.add("Pear");
String[] array = new String[set.size()];
set.toArray(array);
for (String e : array) {
System.out.println(e);
}
assertEquals(expectedSize, array.length);
}
@Test
public void streamToArray() {
int expectedSize = 3;
Set<String> set = new TreeSet<String>();
set.add("Longan");
set.add("Tomato");
set.add("Pear");
String[] array = set.stream().toArray(String[]::new);
for (String e : array) {
System.out.println(e);
}
assertEquals(expectedSize, array.length);
}
}
心得分享
Java TreeSet Example 提供了幾種 TreeSet 常見方法的操作範例,在應用上相當廣泛,熟悉 Java TreeSet 這些方法的操作,像是: entrySet 、 forEach 、 toArray 等方法。