个性化阅读
专注于IT技术分析

Java TreeSet类

TreeSet类层次结构

Java TreeSet类实现了Set接口, 该接口使用树进行存储。它继承了AbstractSet类并实现了NavigableSet接口。 TreeSet类的对象以升序存储。

关于Java TreeSet类的要点是:

  • Java TreeSet类仅包含唯一元素, 例如HashSet。
  • Java TreeSet类的访问和检索时间非常安静。
  • Java TreeSet类不允许使用null元素。
  • Java TreeSet类不同步。
  • Java TreeSet类维护升序。

TreeSet类的层次结构

如上图所示, Java TreeSet类实现了NavigableSet接口。 NavigableSet接口按层次结构顺序扩展了SortedSet, Set, Collection和Iterable接口。

TreeSet类声明

让我们看看java.util.TreeSet类的声明。

public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, Serializable

Java TreeSet类的构造方法

建设者 描述
TreeSet() 它用于构造一个空树集, 该树集将根据树集的自然顺序以升序排序。
TreeSet(Collection <?扩展E> c) 它用于构建包含集合c的元素的新树集。
TreeSet(Comparator <?super E>比较器) 它用于构造一个空树集, 该树集将根据给定的比较器进行排序。
TreeSet(SortedSet<E> s) 它用于构建包含给定SortedSet元素的TreeSet。

Java TreeSet类的方法

方法 描述
boolean add(E e) 如果指定的元素尚不存在, 则用于将其添加到此集合中。
布尔addAll(Collection <?扩展E> c) 它用于将指定集合中的所有元素添加到该集合中。
E ceiling(E e) 它从集合中返回指定元素的等于或最接近的最大元素, 如果没有, 则返回null。
比较器<?超级E>比较器() 它返回按顺序排列元素的比较器。
Iterator descendingIterator() 它用于按降序迭代元素。
NavigableSet descendingSet() 它以相反的顺序返回元素。
E floor(E e) 它从集合中返回指定元素的等于或最接近的最小元素, 如果没有, 则返回null。
SortedSet headSet(E toElement) 它返回小于指定元素的元素组。
NavigableSet headSet(E toElement, boolean inclusive) 它返回小于或等于(如果包含, 则为true)指定元素的元素组。
E higher(E e) 它从集合中返回指定元素中最接近的最大元素, 如果没有, 则返回null。
Iterator iterator() 它用于按升序迭代元素。
E lower(E e) 它返回集合中指定元素的最接近的最小元素, 如果没有, 则返回null。
E pollFirst() 它用于检索和删除最低(第一个)元素。
E pollLast() 它用于检索和删除最高(最后)元素。
Spliterator spliterator() 它用于在元素上创建后绑定和故障快速拆分器。
NavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) 它返回位于给定范围之间的一组元素。
SortedSet subSet(E fromElement, E toElement)) 它返回位于给定范围(包括fromElement和不包括toElement)之间的一组元素。
SortedSet tailSet(E fromElement) 它返回一组大于或等于指定元素的元素。
NavigableSet tailSet(E fromElement, boolean inclusive) 它返回一组大于或等于(如果包含, 则为真)指定元素的元素。
boolean contains(Object o) 如果此集合包含指定的元素, 则返回true。
boolean isEmpty() 如果此集合不包含任何元素, 则返回true。
boolean remove(Object o) 如果存在指定元素, 则用于从该集合中删除该元素。
void clear() 它用于删除此集合中的所有元素。
Object clone() 它返回此TreeSet实例的浅表副本。
E first() 它返回此排序集中当前的第一个(最低)元素。
E last() 它返回此排序集中当前的最后一个(最高)元素。
int size() 它返回此集合中的元素数。

Java TreeSet示例

Java TreeSet示例1:

让我们看一个简单的Java TreeSet示例。

import java.util.*;
class TreeSet1{
 public static void main(String args[]){
  //Creating and adding elements
  TreeSet<String> al=new TreeSet<String>();
  al.add("Ravi");
  al.add("Vijay");
  al.add("Ravi");
  al.add("Ajay");
  //Traversing elements
  Iterator<String> itr=al.iterator();
  while(itr.hasNext()){
   System.out.println(itr.next());
  }
 }
}

立即测试

输出:

Ajay
Ravi
Vijay

Java TreeSet示例2:

让我们看一个以降序遍历元素的示例。

import java.util.*;
class TreeSet2{
 public static void main(String args[]){
 TreeSet<String> set=new TreeSet<String>();
		 set.add("Ravi");
		 set.add("Vijay");
		 set.add("Ajay");
		 System.out.println("Traversing element through Iterator in descending order");
		 Iterator i=set.descendingIterator();
		 while(i.hasNext())
		 {
			 System.out.println(i.next());
		 }
		 
 }
}

立即测试

输出:

Traversing element through Iterator in descending order
Vijay
Ravi
Ajay
Traversing element through NavigableSet in descending order
Vijay
Ravi
Ajay

Java TreeSet示例3:

让我们看一个示例来检索和删除最高和最低价值。

import java.util.*;
class TreeSet3{
 public static void main(String args[]){
 TreeSet<Integer> set=new TreeSet<Integer>();
		 set.add(24);
		 set.add(66);
		 set.add(12);
		 set.add(15);
		 System.out.println("Highest Value: "+set.pollFirst());
		 System.out.println("Lowest Value: "+set.pollLast());
 }
}

输出:

Highest Value: 12
Lowest Value: 66

Java TreeSet示例4:

在此示例中, 我们执行各种NavigableSet操作。

import java.util.*;
class TreeSet4{
 public static void main(String args[]){
  TreeSet<String> set=new TreeSet<String>();
		 set.add("A");
		 set.add("B");
		 set.add("C");
		 set.add("D");
		 set.add("E");
		 System.out.println("Initial Set: "+set);
		 
		 System.out.println("Reverse Set: "+set.descendingSet());
         
		 System.out.println("Head Set: "+set.headSet("C", true));
		
		 System.out.println("SubSet: "+set.subSet("A", false, "E", true));
		 
		 System.out.println("TailSet: "+set.tailSet("C", false));
 }
}

输出:

Initial Set: [A, B, C, D, E]
Reverse Set: [E, D, C, B, A]
Head Set: [A, B, C]
SubSet: [B, C, D, E]
TailSet: [D, E]

Java TreeSet示例4:

在此示例中, 我们执行各种SortedSetSet操作。

import java.util.*;
class TreeSet4{
 public static void main(String args[]){
  TreeSet<String> set=new TreeSet<String>();
		 set.add("A");
		 set.add("B");
		 set.add("C");
		 set.add("D");
		 set.add("E");
		 
		 System.out.println("Intial Set: "+set);
		 
		 System.out.println("Head Set: "+set.headSet("C"));
		
		 System.out.println("SubSet: "+set.subSet("A", "E"));
		 
		 System.out.println("TailSet: "+set.tailSet("C"));
 }
}

输出:

Intial Set: [A, B, C, D, E]
Head Set: [A, B]
SubSet: [A, B, C, D]
TailSet: [C, D, E]

Java TreeSet示例:书籍

让我们看一个TreeSet示例, 其中我们要添加书籍以进行设置并打印所有书籍。 TreeSet中的元素必须为Comparable类型。默认情况下, String和Wrapper类是可比较的。要在TreeSet中添加用户定义的对象, 你需要实现Comparable接口。

import java.util.*;
class Book implements Comparable<Book>{
int id;
String name, author, publisher;
int quantity;
public Book(int id, String name, String author, String publisher, int quantity) {
	this.id = id;
	this.name = name;
	this.author = author;
	this.publisher = publisher;
	this.quantity = quantity;
}
public int compareTo(Book b) {
	if(id>b.id){
		return 1;
	}else if(id<b.id){
		return -1;
	}else{
	return 0;
	}
}
}
public class TreeSetExample {
public static void main(String[] args) {
    Set<Book> set=new TreeSet<Book>();
	//Creating Books
	Book b1=new Book(121, "Let us C", "Yashwant Kanetkar", "BPB", 8);
	Book b2=new Book(233, "Operating System", "Galvin", "Wiley", 6);
	Book b3=new Book(101, "Data Communications & Networking", "Forouzan", "Mc Graw Hill", 4);
	//Adding Books to TreeSet
	set.add(b1);
	set.add(b2);
	set.add(b3);
	//Traversing TreeSet
	for(Book b:set){
	System.out.println(b.id+" "+b.name+" "+b.author+" "+b.publisher+" "+b.quantity);
	}
}
}

输出:

101 Data Communications & Networking Forouzan Mc Graw Hill 4
121 Let us C Yashwant Kanetkar BPB 8
233 Operating System Galvin Wiley 6

赞(0)
未经允许不得转载:srcmini » Java TreeSet类

评论 抢沙发

评论前必须登录!