TreeSet in Java with Examples - Java 147

TreeSet in Java with Examples – Java 147

TreeSet 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 等方法。

發佈留言