java中的TreeSet的介绍以及使用

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 包含的元素相同,并按照相同的顺序对元素进行排序。
方法摘要
booleanadd(E o)
将指定的元素添加到 set(如果尚未存在于该 set 中)。
booleanaddAll(Collection<? extends E> c)
将指定 collection 中的所有元素添加到此 set 中。
voidclear()
移除 set 中的所有元素。
Objectclone()
返回 TreeSet 实例的浅表复制(并不克隆元素自身)。
Comparator<? super E>comparator()
返回用于确定已排序 set 顺序的比较器,或者,如果此树 set 使用其元素的自然顺序,则返回 null
booleancontains(Object o)
如果 set 包含指定的元素,则返回 true
Efirst()
返回已排序 set 中当前的第一个(最小)元素。
SortedSet<E>headSet(E toElement)
返回此 set 的部分视图,要求其元素严格小于 toElement
booleanisEmpty()
如果 set 不包含元素,则返回 true
Iterator<E>iterator()
返回对此 set 中的元素进行迭代的迭代器。
Elast()
返回已排序 set 中当前的最后一个(最大)元素。
booleanremove(Object o)
将指定的元素从 set 中移除(如果该元素存在于此 set 中)。
intsize()
返回 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]
* */

}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值