TreeSet() 构造一个新的空 set,该 set 按照元素的自然顺序排序。 |
TreeSet(Collection<? extends E> c) 构造一个新 set,包含指定 collection 中的元素,这个新 set 按照元素的自然顺序 排序。 |
TreeSet(Comparator<? super E> c) 构造一个新的空 set,该 set 根据指定的比较器进行排序。 |
TreeSet(SortedSet<E> s) 构造一个新 set,该 set 所包含的元素与指定的已排序 set 包含的元素相同,并按照相同的顺序对元素进行排序。 |
方法摘要 | |
---|---|
boolean | add(E o) 将指定的元素添加到 set(如果尚未存在于该 set 中)。 |
boolean | addAll(Collection<? extends E> c) 将指定 collection 中的所有元素添加到此 set 中。 |
void | clear() 移除 set 中的所有元素。 |
Object | clone() 返回 TreeSet 实例的浅表复制(并不克隆元素自身)。 |
Comparator<? super E> | comparator() 返回用于确定已排序 set 顺序的比较器,或者,如果此树 set 使用其元素的自然顺序,则返回 null。 |
boolean | contains(Object o) 如果 set 包含指定的元素,则返回 true。 |
E | first() 返回已排序 set 中当前的第一个(最小)元素。 |
SortedSet<E> | headSet(E toElement) 返回此 set 的部分视图,要求其元素严格小于 toElement。 |
boolean | isEmpty() 如果 set 不包含元素,则返回 true。 |
Iterator<E> | iterator() 返回对此 set 中的元素进行迭代的迭代器。 |
E | last() 返回已排序 set 中当前的最后一个(最大)元素。 |
boolean | remove(Object o) 将指定的元素从 set 中移除(如果该元素存在于此 set 中)。 |
int | size() 返回 set 中的元素个数(其容量)。 |
SortedSet<E> | subSet(E fromElement, E toElement) 返回此 set 的部分视图,其元素从 fromElement(包括)到 toElement(不包括)。 |
package set;
/*
*
* 规定 ,姓名相同则二个Person类相同 重写equals 和hashCode
* 哪个类的年龄大哪个类就大 重写compareTo
*
* */
public class Person implements Comparable<Person>{
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person() {
super();
}
public Person(int age, String name) {
super();
this.age = age;
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public int compareTo(Person o) {
return this.age-o.age;
}
@Override
public String toString() {
return "Person [age=" + age + ", name=" + name + "]";
}
}
package set;
import java.util.Set;
import java.util.TreeSet;
public class TestTreeSet {
/**
* @yy
* TreeSet的特点
* 1:底层实现是红黑树,保证插入、删除、查找的时间复杂度log(n) 时间开销。
* 2:线层不安全
*
* 此类实现 Set 接口,该接口由 TreeMap 实例支持。此类保证排序后的 set 按照升序排列元素,
* 根据使用的构造方法不同,可能会按照元素的自然顺序 进行排序(参见 Comparable),或按照在创建 set 时所提供的比较器进行排序。
此实现为基本操作(add、remove 和 contains)提供了可保证的 log(n) 时间开销。
注意,如果要正确实现 Set 接口,则 set 所维护的顺序(是否提供了显式比较器)必须为与等号一致(请参阅与等号一致 精确定义的 Comparable 或 Comparator)。
这是因为 Set 接口根据 equals 操作进行定义,但 TreeSet 实例将使用其 compareTo(或 compare)方法执行所有的键比较,
因此,从 set 的角度出发,该方法认为相等的两个键就是相等的。即使 set 的顺序与等号不一致,其行为也是 定义良好的;它只是违背了 Set 接口的常规协定。
*/
public static void main(String[] args) {
Set<Person> set=new TreeSet<Person>();
Person p=new Person(11,"yy");
Person p1=new Person(11,"yyk");
Person p2=new Person(12,"oyy");
Person p3=new Person(13,"jyy");
Person p4=new Person(11,"yy");
set.add(p);
set.add(p1);
set.add(p2);
set.add(p3);
set.add(p4);
System.out.println(set.size());
for(Person per:set){
System.out.println(per);
}
/*
* 3
Person [age=11, name=yy]
Person [age=12, name=oyy]
Person [age=13, name=jyy]
* */
}
}