以下是关于Java中TreeSet
的几个关键点,需要注意的是:
TreeSet
不能包含重复的元素。TreeSet
时提供的自定义比较器进行排序。TreeSet
不能包含null
的值。TreeSet
内部使用TreeMap
来存储元素。TreeSet
类内部使用TreeMap
来存储元素。TreeSet
的实现是不同步的--如果多个线程同时访问一个树集,并且至少有一个线程修改了该树集,那么它必须在外部进行同步。例子。SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));
ConcurrentModificationException
。###创建TreeSet
实例
// Creating a TreeSet
TreeSet<String> fruits = new TreeSet<>();
// Adding new elements to a TreeSet
fruits.add("Banana");
fruits.add("Apple");
fruits.add("Pineapple");
fruits.add("Orange");
System.out.println("Fruits Set : " + fruits);
// Duplicate elements are ignored
fruits.add("Apple");
System.out.println("After adding duplicate element \"Apple\" : " + fruits);
// This will be allowed because it's in lowercase.
fruits.add("banana");
System.out.println("After adding \"banana\" : " + fruits);
输出。
Fruits Set : [Apple, Banana, Orange, Pineapple]
After adding duplicate element "Apple" : [Apple, Banana, Orange, Pineapple]
After adding "banana" : [Apple, Banana, Orange, Pineapple, banana]
注意,在这个例子中,重复的元素被忽略了。
TreeSet
带有一个自定义比较器(不区分大小写的顺序)让我们创建一个带有自定义比较器的TreeSet,通过忽略大小写对元素进行排序。
// Creating a TreeSet with a custom Comparator (Case Insensitive Order)
SortedSet<String> weekDays = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
// Adding new elements to a TreeSet
weekDays.add("Monday");
weekDays.add("Tuesday");
weekDays.add("Wednesday");
weekDays.add("Thursday ");
weekDays.add("Friday ");
weekDays.add("Saturday ");
weekDays.add("Sunday");
System.out.println("weekDays Set : " + weekDays);
// Now, lowercase elements will also be considered as duplicates
weekDays.add("sunday");
System.out.println("After adding \"sunday\" : " + weekDays);
输出:
weekDays Set : [Friday , Monday, Saturday , Sunday, Thursday , Tuesday, Wednesday]
After adding "sunday" : [Friday , Monday, Saturday , Sunday, Thursday , Tuesday, Wednesday]
注意,'sunday'元素是不区分大小写的,它被忽略了。
TreeSet
与自定义Comparator
示例(降序)// Creating a TreeSet with a custom Comparator (Descending Order)
SortedSet<String> weekDays = new TreeSet<>(Comparator.reverseOrder());
// Adding new elements to a TreeSet
weekDays.add("Monday");
weekDays.add("Tuesday");
weekDays.add("Wednesday");
weekDays.add("Thursday ");
weekDays.add("Friday ");
weekDays.add("Saturday ");
weekDays.add("Sunday");
System.out.println("weekDays Set : " + weekDays);
输出。
weekDays Set : [Wednesday, Tuesday, Thursday , Sunday, Saturday , Monday, Friday ]
###访问TreeSet
的元素
例子 1: 求一个TreeSet的大小。
TreeSet<String> students = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
students.add("Ramesh");
students.add("Prakash");
students.add("Amir");
// Finding the size of a TreeSet
System.out.println("Number of elements in the TreeSet : " + students.size());
例2: 检查一个元素是否存在于一个TreeSet中。
TreeSet<String> students = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
students.add("Ramesh");
students.add("Prakash");
students.add("Amir");
// Check if an element exists in the TreeSet
String name = "Julia";
if(students.contains(name)) {
System.out.println("TreeSet contains the element : " + name);
} else {
System.out.println("TreeSet does not contain the element : " + name);
}
例3:查找TreeSet中的第一个元素。
TreeSet<String> students = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
students.add("Ramesh");
students.add("Prakash");
students.add("Amir");
// Navigating through the TreeSet
System.out.println("First element : " + students.first());
例4:查找TreeSet中的最后一个元素。
TreeSet<String> students = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
students.add("Ramesh");
students.add("Prakash");
students.add("Amir");
System.out.println("Last element : " + students.last());
例5:在TreeSet中找到比给定元素高的元素。
TreeSet<String> students = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
students.add("Ramesh");
students.add("Prakash");
students.add("Amir");
String name = "amir";
System.out.println("Element just greater than " + name + " : " + students.higher(name));
例6: 在TreeSet中找到刚好比给定元素低的元素。
TreeSet<String> students = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
students.add("Ramesh");
students.add("Prakash");
students.add("Amir");
String name = "amir";
System.out.println("Element just lower than " + name + " : " + students.lower(name));
###从一个TreeSet
中删除元素
例1: 从TreeSet中删除一个元素。
TreeSet<Integer> numbers = new TreeSet<>();
numbers.add(10);
numbers.add(15);
numbers.add(20);
numbers.add(25);
// Remove an element from the TreeSet
boolean isRemoved = numbers.remove(49);
例2: 删除所有满足给定谓词的元素。
TreeSet<Integer> numbers = new TreeSet<>();
numbers.add(10);
numbers.add(15);
numbers.add(20);
numbers.add(25);
// Remove all elements divisible by 3
numbers.removeIf(number -> number % 3 == 0);
例3: 删除TreeSet的第一个元素。
TreeSet<Integer> numbers = new TreeSet<>();
numbers.add(10);
numbers.add(15);
numbers.add(20);
numbers.add(25);
// Retrieve and remove the first element from the TreeSet
Integer num = numbers.pollFirst();
System.out.println("Removed first element " + num + " from the TreeSet : " + numbers);
例4:移除TreeSet的最后一个元素。
TreeSet<Integer> numbers = new TreeSet<>();
numbers.add(10);
numbers.add(15);
numbers.add(20);
numbers.add(25);
// Retrieve and remove the last element from the TreeSet
num = numbers.pollLast();
System.out.println("Removed last element " + num + " from the TreeSet : " + numbers);
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.javaguides.net/2018/07/guide-to-treeset-class.html
内容来源于网络,如有侵权,请联系作者删除!