各位看官们,大家好,上一回中咱们说的是Java中类集之Set
的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起Talk Android吧!
看官们,我们在前面章回中介绍了Set接口和它的实现类HashSet
。本章回中将介绍Set接口的另外一个实现类TreeSet
。TreeSet
表示有序的集合,而HashSet
表示无序的集合,这是它们之间的不同点。这个顺序不是指按照输入数据时的顺序,它是按照Comparable
接口中compareTo()
方法的结果来排序的。因此使用TreeSet
存放自定义的数据类型时,需要实现该接口。存放内置数据类型时就不需要了。
TreeSet
可以向HashSet
一样添加或者删除数据,不过因为TreeSet
集合是有序集合,所以添加或者删除数据会对集合排序,以保证整个集合的有序性。除此之外,它还有一些自己特有的方法:
first()和last()
用来返回集合第一个和最后一个元素headSet(obj)和tailSet(obj)
用来返回在obj元素前面和后面所有元素组成的集合subSet(from,to)
返回 从from到to这个“区间”内元素组成的集合
这些操作涉及的大于或者小于某个数据元素,大于或者小于的比较是基于equals()和hashCode()
方法,而且大于操作包含元素本身,可以看作是大于等于某个数据,小于操作则不包含元素本身(可以通过程序运行结果看出来)。
准确来讲TreeSet
是SortedSet
接口的实现类,而SortedSet
接口又是Set
接口的子接口,因此可以把TreeSet
类看作是Set
接口的实现类。不过在代码中最好把TreeSet
类对象转换为SortedSet
接口对象,而不是Set
接口对象,不然好多方法无法使用。下面是具体的代码,请参考:
import java.util.Arrays;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
public class setEx {
public static void main(String args[]){
// init set
SortedSet<Integer> set = new TreeSet<>();
for (int i = 0; i < 10; ++i) {
// set.add(new Integer(i+1));
set.add((i + 1));
}
// show size of set ,and content of set
System.out.println("size of set: " + set.size());
for (Integer i : set)
System.out.print(i + " ");
System.out.println("\nset: " + set);
// delete the content of set,this is based on content of set
if(set.remove(9)) {
System.out.println("after removing the content 9. set: " + set);
} else {
System.out.println("removing the content 9 failed.");
}
// delete the same content of set,it is failed to remove
if(set.remove(9)) {
System.out.println("after removing the content 9. set: " + set);
} else {
System.out.println("removing the content 9 failed.");
}
// add the same content of set,it is failed to add
if(set.add(9)) {
System.out.println("after adding the content 9. set: " + set);
} else {
System.out.println("adding the content 9 failed.");
}
// add the content of set,this is based on content of set
if(set.add(9)) {
System.out.println("after adding the content 9. set: " + set);
} else {
System.out.println("adding the content 9 failed.");
}
// change set to array
Integer[] array = set.toArray(new Integer[] {});
System.out.println("change set to array: " + Arrays.toString(array));
//------------ this is for TreeSet ---------------
System.out.println("TreeSet operation: first: "+set.first() );
System.out.println("TreeSet operation: last: "+set.last() );
System.out.println("TreeSet operation: headSet 6: "+set.headSet(6) );
System.out.println("TreeSet operation: TailSet 6: "+set.tailSet(6) );
System.out.println("TreeSet operation: subSet[3,9]: "+set.subSet(3,9));
//------------ this is for TreeSet ---------------
// add the content of set,this is based on content of set
set.clear();
System.out.println("after clearing the set: " + set);
}
}
下面是程序的运行结果,请参考:
size of set: 10
1 2 3 4 5 6 7 8 9 10
set: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
after removing the content 9. set: [1, 2, 3, 4, 5, 6, 7, 8, 10]
removing the content 9 failed.
after adding the content 9. set: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
adding the content 9 failed.
change set to array: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
TreeSet operation: first: 1
TreeSet operation: last: 10
TreeSet operation: headSet 6: [1, 2, 3, 4, 5]
TreeSet operation: TailSet 6: [6, 7, 8, 9, 10]
TreeSet operation: subSet[3,9]: [3, 4, 5, 6, 7, 8]
after clearing the set: []
各位看官,关于Java中类集之Set的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!