TreeSet

Sun, Oct 2, 2022 閱讀時間 1 分鐘

TreeSet

TreeSet使用是紅黑樹。

自訂排序

Set treeSet = new TreeSet<>(Comparator.comparing(String::length));


    Set<Integer> treeSet = new TreeSet<>();
    treeSet.add(1);
    treeSet.add(2);
    treeSet.add(3);

    Iterator<Integer> itr = treeSet.iterator();
    // Iterator<String> itr = treeSet.descendingIterator();  // 降冪

    while (itr.hasNext()) {
        log.info(itr.next());
    }

.first() => 返回第一個元素, last() => 返回最後一個元素


    TreeSet<String> treeSet = new TreeSet<>();
    treeSet.add(1);
    treeSet.add(2);
    treeSet.add(3);
    treeSet.add(4);
    treeSet.add(5);

    assertEquals(1, treeSet.first());
    assertEquals(5, treeSet.last());

subSet(fromKey, toKey) => fromElement 到 toElement的元素 (跟 substring 一樣 包頭不包尾)


    SortedSet<Integer> treeSet = new TreeSet<>();
    treeSet.add(1);
    treeSet.add(2);
    treeSet.add(3);
    treeSet.add(4);
    treeSet.add(5);
    treeSet.add(6);

    Set<Integer> expectedSet = new TreeSet<>();
    expectedSet.add(2);
    expectedSet.add(3);
    expectedSet.add(4);
    expectedSet.add(5);

    assertEquals(expectedSet, treeSet.subSet(2, 6));

headSet() => 返回小於指定 key 的 element, tailSet() => 返回大於等於指定 key 的 element


    SortedSet<Integer> treeSet = new TreeSet<>();
    treeSet.add(1);
    treeSet.add(2);
    treeSet.add(3);
    treeSet.add(4);
    treeSet.add(5);
    treeSet.add(6);

    System.out.println(treeSet.headSet(6)); // [1, 2, 3, 4, 5]
    System.out.println(treeSet.tailSet(3)); // [3, 4, 5, 6]
    System.out.println( treeSet.subSet(3, 7)); // [3, 4, 5, 6]


    assertEquals(treeSet.headSet(6), treeSet.subSet(1, 6));
    assertEquals(treeSet.tailSet(3), treeSet.subSet(3, 7));

issue:
LC issue