TreeSet<E>

TreeSet<E> 是 Java 集合框架中的一个重要类,它位于 java.util 包下,实现了 NavigableSet<E> 接口,而 NavigableSet<E> 又继承自 SortedSet<E> 接口。下面从多个方面为你详细介绍 TreeSet<E>

特性

  • 元素唯一:和 Set 接口的其他实现类一样,TreeSet 不允许存储重复元素。当尝试添加重复元素时,TreeSet 会忽略该操作。
  • 元素有序TreeSet 会根据元素的自然顺序或者创建 TreeSet 时指定的比较器(Comparator)对元素进行排序。若元素实现了 Comparable 接口,TreeSet 会使用元素的自然顺序;若在创建 TreeSet 时传入了 Comparator 对象,则使用该比较器定义的顺序。
  • 基于红黑树实现:红黑树是一种自平衡的二叉搜索树,这使得 TreeSet 在插入、删除和查找操作上的时间复杂度为 O(log n)

构造方法

  • TreeSet():创建一个新的空 TreeSet,使用元素的自然顺序进行排序。元素必须实现 Comparable 接口。
import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(3);
        numbers.add(1);
        numbers.add(2);
        System.out.println(numbers); 
    }
}

  • TreeSet(Comparator<? super E> comparator):创建一个新的空 TreeSet,使用指定的比较器进行排序。
import java.util.Comparator;
import java.util.TreeSet;

class Person {
    private String name;
    private int age;

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

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

public class TreeSetWithComparator {
    public static void main(String[] args) {
        Comparator<Person> ageComparator = Comparator.comparingInt(Person::getAge);
        TreeSet<Person> people = new TreeSet<>(ageComparator);
        people.add(new Person("Alice", 25));
        people.add(new Person("Bob", 20));
        people.add(new Person("Charlie", 30));
        System.out.println(people); 
    }
}

  • TreeSet(Collection<? extends E> c):创建一个包含指定集合中所有元素的 TreeSet,使用元素的自然顺序进行排序。
import java.util.ArrayList;
import java.util.TreeSet;

public class TreeSetFromCollection {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(3);
        list.add(1);
        list.add(2);
        TreeSet<Integer> numbers = new TreeSet<>(list);
        System.out.println(numbers); 
    }
}

常用方法

  • add(E e):将指定元素添加到集合中,如果集合中已经存在该元素,则不添加。添加成功返回 true,否则返回 false
TreeSet<String> set = new TreeSet<>();
boolean result = set.add("apple"); 

  • remove(Object o):从集合中移除指定元素,如果元素存在则移除并返回 true,否则返回 false
boolean removed = set.remove("apple"); 

  • contains(Object o):判断集合中是否包含指定元素,包含返回 true,否则返回 false
boolean contains = set.contains("apple"); 

  • first():返回集合中的第一个(最小的)元素。
String firstElement = set.first(); 

  • last():返回集合中的最后一个(最大的)元素。
String lastElement = set.last(); 

  • size():返回集合中的元素数量。
int size = set.size(); 

  • iterator():返回一个用于遍历集合的迭代器,元素按升序排列。
import java.util.Iterator;
import java.util.TreeSet;

TreeSet<String> set = new TreeSet<>();
set.add("apple");
set.add("banana");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

注意事项

  • 元素必须可比较:如果使用无参构造函数创建 TreeSet,元素必须实现 Comparable 接口;如果使用带比较器的构造函数,则无需元素实现 Comparable 接口。
  • 线程不安全TreeSet 不是线程安全的,如果需要在多线程环境下使用,可以考虑使用 Collections.synchronizedSortedSet 方法将其包装成线程安全的集合。
import java.util.Collections;
import java.util.TreeSet;
import java.util.SortedSet;

SortedSet<Integer> synchronizedSet = Collections.synchronizedSortedSet(new TreeSet<>());

综上所述,TreeSet 是一个非常实用的集合类,适合需要对元素进行排序和去重的场景。

Java集合框架 文章被收录于专栏

Java集合框架是Java提供的一组用于存储和操作数据的类和接口,它位于java.util包中,为开发者提供了强大且灵活的数据存储和处理能力。以下将从整体架构、主要接口、常用实现类、使用场景以及示例代码等方面详细介绍Java集合框架。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务