个人博客
专注IT梦想的地方

java常用对象API中集合框架之TreeSet(上)

由于昨天学的比较晚,智言我在学习完HashSet后其实已经将TreeSet看了一遍,但是后来由于看完后就去写《java常用对象API中集合框架之HashSet》这篇文章,为了让之后想学java的新朋友能够看的明白HashSet的用法,所以我把HashSet写的非常的详细,同时用了一些案例来配合讲解,所以以至于今天在回忆TreeSet的知识点的时候,完全是处于茫然的局面,而且是一点记忆都没有,所以今天下班后马上就把TreeSet的知识点又重新的看了一遍,直到看明白后我才决定在我的博客里写上关于TreeSet的一些知识点说明,好让其他网友茅塞顿开…

首先还是先来了解一下TreeSet的大致作用:它是可以对Set集合中的元素进行自然排序,并且是不同步的;它判断元素唯一性的方式就是根据比较方法的返回结果是否是0,是0,就是相同元素,那么就不存储。

例如:

这里建立主函数TreeSetDemo类

public class TreeSetDemo{

public static void main(String[] args){

TreeSet ts = new TreeSet();

ts.add(“abc”);

ts.add(“bcd”);

ts.add(“cba”);

ts.add(“bdc”);

ts.add(“aed”);

Iterator it = ts.iterator();   //创建迭代器

while(it.hasNext()){

System.out.println(it.next());

}

}

}

显示结果为:

abc
aed
bcd
bdc
cba

这次的结果符合TreeSet的定义,对Set中的元素进行自然排序。

但是,当我添加进TreeSet类中的元素定义成我自己设计的Person类的时候,这个时候程序开始出现错误,如下:

1.首先建立Person类()

public class Person{

private String name;

private int age;

public Person(String name, int age){

super();

this.name=name;

this.age=age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

2.然后将主函数TreeSetDemo类更改为:

public class TreeSetDemo {

public static void main(String[] args) {

TreeSet ts = new TreeSet();

ts.add(new Person(“张三”,21));

ts.add(new Person(“李四”,22));

ts.add(new Person(“王五”,24));

ts.add(new Person(“赵六”,28));

Iterator it = ts.iterator();

while(it.hasNext()){

Person p=(Person)it.next();

System.out.println(p.getName()+”…”+p.getAge());

}

}

}

3.然后运行程序,但是却出现了Person cannot be cast to java.lang.Comparable的错误提示,于是打开API文档进行了查找,最后发现Comparable居然不是一个类,而是一个接口。

Comparable的定义是这样的:此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。

也就是说这个接口提供了一个compareTo的方法来进行自然排序,那么此时智言产生了一个疑问就是,compareTo方法是如何对元素进行排序的呢?于是智言又继续对compareTo方法进行查看,然后看到compareTo方法的定义为:比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

其实智言也看不懂是个什么意思,毕竟是新手嘛,所以还是亲自找度娘(百度)问了一下,最后才理解了Comparable接口和compareTo方法这两个知识要点。

那么智言还是以举例来说明一下:

1.首先我们需要实现Person类对Comparable接口的实现;

2.其次覆盖compareTo方法;

public class Person implements Comparable{

private String name;

private int age;

public int compareTo(Object o) {

Person p = (Person)o;

int temp = this.name.compareTo(p.name);

return temp==0?this.age-p.age:temp;

}

public Person(String name, int age){

super();

this.name=name;

this.age=age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

那么这样就解决了所有该有的问题,今天又是由于时间原因,暂时写这么多,明天把下半部,也就是TreeSet的另外一种排序方式给各位分享出来,谢谢。

赞(0) 打赏
未经允许,不得转载本站任何文章:智言个人博客 » java常用对象API中集合框架之TreeSet(上)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏