Java TreeSet的特殊方法
TreeSet是Java中使用Tree进行存储的SortedSet接口的最重要实现之一。TreeSet通过继承AbstractSet类实现了一个NavigableSet接口。这意味着存储在TreeSet中的元素是有序的,也就是按升序排列。由于TreeSet的这一特性,除了传统上由Collection接口提供的方法外,它还提供了NavigableSet接口的某些惊人的方法。
注意: 由于TreeSet是Set的实现,因此它不允许元素的重复。
TreeSet提供的一些具体方法如下。
floor()
方法lower()
方法- ceiling() 方法
- higher() 方法
- subSet() “方法
- headSet() 方法
- tailSet() 方法
现在让我们讨论一下所有的方法以及它们的实现,如下所示
方法 1: floor()
方法
该方法返回集合中小于或等于给定元素的最大元素,如果没有这样的元素,则返回空。
参数: 需要搜索一个小于或等于数值的数字
语法:
treeSetObject.floor(argument) ;
示例:
// Java Program to demonstrate Floor Method in TreeSet
// Importing input output classes
import java.io.*;
// Importing TreeSet and Set classes from java.util package
import java.util.Set;
import java.util.TreeSet;
// Main class
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an object of TreeSet of Integer type
// Initializing object with integer values using
// Set.of() method
TreeSet<Integer> treeSet
= new TreeSet<>(Set.of(12, 98, 54, 37, 68));
// Print and display elements in object
System.out.println("Tree set = " + treeSet);
// Case 1
// Using floor() method over treeSet elements but
// note floor() method is inclusive of the limit
// Hence maximum element is returned
System.out.println("floor(60) = "
+ treeSet.floor(60));
// Case 2
// Using floor() method over treeSet elements,
// therefore output of the below line will be the
// number itself
System.out.println("floor(54) = "
+ treeSet.floor(54));
}
}
输出
Tree set = [12, 37, 54, 68, 98]
floor(60) = 54
floor(54) = 54
方法 2: lower()
方法
该方法返回这个集合中严格小于给定元素的最大元素,如果没有这样的元素,则返回空。
参数: 需要找到其小于值的数字。
语法:
treeSetObject.lower(argument) ;
示例:
// Java Program to demonstrate Lower Method in TreeSet
// Importing input output classes
import java.io.*;
// Importing TreeSet and Set classes from java.util package
import java.util.Set;
import java.util.TreeSet;
// Main class
class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an object of TreeSet of Integer type
// Initializing object with integer values using
// Set.of() method
TreeSet<Integer> treeSet
= new TreeSet<>(Set.of(12, 98, 54, 37, 68));
// Print and display elements in object
System.out.println(treeSet);
// Case 1
// Using lower() method over treeSet elements where
// argument passed is greater then max element in
// TreeSet therefore returning max element itself
System.out.println("lower(90) = "
+ treeSet.lower(90));
// Case 2
// Using lower() method over treeSet elements where
// argument passed is not greater then max element
// in TreeSet therefore returning element lesser
// than that passed as an argument
System.out.println("lower(68) = "
+ treeSet.lower(68));
// Also note that lower() method is exclusive of the
// limit
}
}
输出
[12, 37, 54, 68, 98]
lower(90) = 68
lower(68) = 54
方法 3: ceiling()
方法
该方法返回这个集合中大于或等于给定元素的最小元素,如果没有这样的元素,则返回空。
Argument: 需要找到小于或等于其值的数字。
语法:
treeSetObject.lower(argument) ;
示例:
// Java Program to demonstrate Ceiling Method in TreeSet
// Importing input output classes
import java.io.*;
// Importing TreeSet and Set classes from java.util package
import java.util.Set;
import java.util.TreeSet;
// Main class
class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an object of TreeSet of Integer type
// Initializing object with integer values using
// Set.of() method
TreeSet<Integer> treeSet
= new TreeSet<>(Set.of(12, 98, 54, 37, 68));
// Print and display elements in object
System.out.println("tree set = " + treeSet);
// Using ceiling() method.
System.out.println("ceiling(50) = "
+ treeSet.ceiling(50));
// Note that ceiling method is inclusive of the
// limit. Therefore,output of the below line will be
// the same number.
System.out.println("ceiling(68) = "
+ treeSet.ceiling(68));
// Verification for null
System.out.println("ceiling(100) = "
+ treeSet.ceiling(100));
}
}
输出
tree set = [12, 37, 54, 68, 98]
ceiling(50) = 54
ceiling(68) = 68
ceiling(100) = null
方法 4: higher()
方法
这个方法返回这个集合中严格大于给定元素的最小元素,如果没有这样的元素,则返回空。
参数: 需要找到其小于值的数字。
语法:
treeSetObject.lower(argument) ;
示例:
// Java Program to demonstrate Higher Method of TreeSet
// Importing input output classes
import java.io.*;
// Importing Set and TreeSet classes from java.util package
import java.util.Set;
import java.util.TreeSet;
// Main class
class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an object of TreeSet of Integer type
// Initializing object with integer values using
// Set.of() method
TreeSet<Integer> treeSet
= new TreeSet<>(Set.of(12, 98, 54, 37, 68));
// Print and display elements in object
System.out.println("tree set = " + treeSet);
// Using higher() method
// Case 1
System.out.println("higher(50) = "
+ treeSet.higher(50));
// Case 2
// Note that higher method is exclusive of the limit
// causing
// output be the number greater than the number
// passed
System.out.println("higher(68) = "
+ treeSet.higher(68));
// Case 3
// Verification for null
System.out.println("higher(98) = "
+ treeSet.higher(100));
}
}
输出
tree set = [12, 37, 54, 68, 98]
higher(50) = 54
higher(68) = 98
higher(98) = null
方法 5: subSet()
方法
这个方法将返回从fromElement
到toElement
的元素。
注意 : ‘fromElement’是包容的,’toElement’是排斥的。
语法:
treeSetObject.subSet(fromElement, toElement);
// where fromElement is the lower limit (inclusive) and
// toElement is the upper limit (exclusive)
// of the set containing values between these limits
示例:
// Java Program to demonstrate subset Method in TreeSet
// Importing input output classes
import java.io.*;
// Importing Set and TreeSet classes from java.util package
import java.util.Set;
import java.util.TreeSet;
// Main class
class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an object of TreeSet of Integer type
// Initializing object with integer values using
// Set.of() method
TreeSet<Integer> treeSet
= new TreeSet<>(Set.of(12, 98, 54, 37, 68));
// Print and display elements in object
System.out.println("tree set = " + treeSet);
// Using subSet() method
// Case 1
System.out.println(
"Elements between 54 and 98 are : "
+ treeSet.subSet(54, 98));
// Case 2
// If we want to include the upper limit
System.out.println(
"Elements between 54 and 98 including both the limits : "
+ treeSet.subSet(54, true, 98, true));
// Case 3
// If we want to exclude the lower limit
System.out.println(
"Elements between 54 (exclusive) and 98 (inclusive) : "
+ treeSet.subSet(54, false, 98, true));
// Case 4
// If we want to exclude both the limits
System.out.println(
"Elements between 54 (exclusive) and 98 (exclusive) : "
+ treeSet.subSet(54, false, 98, false));
}
}
输出
tree set = [12, 37, 54, 68, 98]
Elements between 54 and 98 are : [54, 68]
Elements between 54 and 98 including both the limits : [54, 68, 98]
Elements between 54 (exclusive) and 98 (inclusive) : [68, 98]
Elements between 54 (exclusive) and 98 (exclusive) : [68]
方法 6: headSet()
方法
此方法将返回TreeSet中小于指定元素的元素。
语法:
treeSetObject.headSet(upToNumber) ;
注意: ‘ upToNumber
‘ 是要找到的数字的上限(排他性)。
示例:
// Java Program to demonstrate headSet Method in TreeSet
// Importing input output classes
import java.io.*;
// Importing Set and TreeSet classes from java.util package
import java.util.Set;
import java.util.TreeSet;
// Main class
class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an object of TreeSet of Integer type
// Initializing object with integer values using
// Set.of() method
TreeSet<Integer> treeSet
= new TreeSet<>(Set.of(12, 98, 54, 37, 68));
// Print and display elements in object
System.out.println("tree set = " + treeSet);
// Implementing headSet() method via TreeSet object
// Case 1
System.out.println("Elements upto 90 : "
+ treeSet.headSet(90));
// Case 2
// The function limit is exclusive of the argument
// passed
System.out.println("Elements upto 68 : "
+ treeSet.headSet(68));
// Case 3
// If we want to include the number passed, then
System.out.println("Elements upto 68 (inclusive) : "
+ treeSet.headSet(68, true));
}
}
输出
tree set = [12, 37, 54, 68, 98]
Elements upto 90 : [12, 37, 54, 68]
Elements upto 68 : [12, 37, 54]
Elements upto 68 (inclusive) : [12, 37, 54, 68]
方法 7:
此方法将返回TreeSet中大于或等于指定元素的元素。
语法:
treeSetObject.tailSet(aboveThisNumber) ;
注意: ‘aboveThisNumber'
是要找到的数字的下限(包括在内)。
示例:
// Java Program to demonstrate tailSet Method in TreeSet
// Importing input output classes
import java.io.*;
import java.util.Set;
import java.util.TreeSet;
// Main class
class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an object of TreeSet of Integer type
// Initializing object with integer values using
// Set.of() method
TreeSet<Integer> treeSet
= new TreeSet<>(Set.of(12, 98, 54, 37, 68));
// Print and display elements in object
System.out.println("tree set = " + treeSet);
// Implementing tailSet()
// Case 1
System.out.println("Elements above 50 : "
+ treeSet.tailSet(50));
// Case 2
// The function limit is inclusive of the argument
// passed
System.out.println("Elements above 54 : "
+ treeSet.tailSet(54));
// Case 3
// If we want to exclude the number passed
System.out.println(
"Elements above 54 (exclusive) : "
+ treeSet.tailSet(54, false));
}
}
输出
tree set = [12, 37, 54, 68, 98]
Elements above 50 : [54, 68, 98]
Elements above 54 : [54, 68, 98]
Elements above 54 (exclusive) : [68, 98]