集合框架--TreeSet集合
来源:互联网 发布:能听着背单词的软件 编辑:程序博客网 时间:2024/05/26 07:28
TreeSet集合:可以对Set集合中的元素进行排序。是不同步的。
注:TreeSet集合判断元素唯一性的方式就是根据比较方法(compareTo)的返回结果是否是0,如果是0就是相同元素就不存。而不会判断hashCode和equals。
例:
import java.util.Iterator;import java.util.TreeSet;public class TreeSetDemo{public static void main(String[] args){TreeSet ts=new TreeSet();ts.add("abc");ts.add("zaa");ts.add("abc");ts.add("nba");ts.add("cba");Iterator it=ts.iterator();while(it.hasNext()){System.out.println(it.next());}}}运行结果:
可以看到结果虽然无序,但是按照元素的指定顺序排序(本例中按照字母顺序进行排序)。
当我们在TreeSet集合中添加自定义对象时:
import java.util.Iterator;import java.util.TreeSet;class Person extends Object{String name;int age;public Person(){super();}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;}public int hashCode(){ //复写hashCode()return name.hashCode()+age;}public boolean equals(Object obj){ //复写equalsif(this==obj) return true;if(!(obj instanceof Person)) throw new ClassCastException("类型错误"); //输入类型错误Person p = (Person)obj;//强制转换return this.name.equals(p.name) && this.age==p.age; //说明姓名和年龄相同则为同一元素}}public class TreeSetDemo{public static void main(String[] args){TreeSet ts=new TreeSet();ts.add(new Person("zhangsan",28));ts.add(new Person("wangwu",23));ts.add(new Person("lisi",21));ts.add(new Person("zhouqi",29));ts.add(new Person("zhaoliu",25));Iterator it=ts.iterator();while(it.hasNext()){Person p = (Person)it.next();System.out.println(p.getName()+":"+p.getAge());}}}运行结果:
程序在主线程上发生了异常,这是因为在TreeSet集合中要对元素进行排序,所以在Person类中要有对元素进行比较的方法,而这个比较方法(compareTo)本身定义在Comparable接口中,因此要让Person类具备比较性,所以要对Person类功能扩展,让其实现Comparable接口,覆盖compareTo方法。
(引申:Comparable接口:此接口强行对实现它的每个类的对象进行整体排序,称为类的自然排序,类的compareTo方法被称为它的自然比较方法。)
修改代码:
import java.util.Iterator;import java.util.TreeSet;class Person extends Object implements Comparable{ //先继承后实现String name;int age;public Person(){super();}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;} public int compareTo(Object o){ //以Person对象的年龄进行从小到大的排序Person p=(Person)o;/* 此部分代码可被下两句代码替换if(this.age>p.age) return 1; //返回正数if(this.age<p.age) return -1; //返回负数if(this.age==p.age){ //当主要条件相等时按次要条件排序return this.name.compareTo(p.name); //String类中的compareTo方法}*/int temp=this.age-p.age; //先按年龄排,再按姓名排return temp==0?this.name.compareTo(p.name):temp;/*先按姓名排,再按年龄排 int temp=this.name.compareTo(p.name);return temp==0?this.age-p.age:temp;*/}}public class TreeSetDemo{public static void main(String[] args){TreeSet ts=new TreeSet();ts.add(new Person("zhangsan",28));ts.add(new Person("wangwu",29));ts.add(new Person("lisi",21));ts.add(new Person("zhouqi",29));ts.add(new Person("zhaoliu",25));Iterator it=ts.iterator();while(it.hasNext()){Person p = (Person)it.next();System.out.println(p.getName()+":"+p.getAge());}}}
运行结果(先按年龄排,再按姓名排):
0 0
- 集合框架--TreeSet集合
- 集合框架-TreeSet集合
- Java 集合框架-TreeSet
- 集合框架(TreeSet练习)
- java 集合框架-TreeSet
- Java集合框架-Set(TreeSet)
- 总结:集合框架(TreeSet)
- java 集合框架-TreeSet练习
- java集合框架系列---TreeSet
- 集合框架__【Set集合】【HashSet】【TreeSet】
- 集合框架__【Set集合】【HashSet】【TreeSet】
- 集合框架--TreeSet集合Comparator比较器
- API集合框架-Set集合之TreeSet
- TreeSet 集合
- TreeSet集合,
- 集合 --- TreeSet
- TreeSet集合
- TreeSet集合
- Collections工具类下的sort方法
- iOS文件操作学习3-28
- 求四个数的最大公约数
- uva 10254——The Priest Mathematician
- 未知图片宽高水平垂直居中
- 集合框架--TreeSet集合
- 安装开源在线教育平台edX的一个简单方法
- 第五周项目1 三角形类练习(4)
- 本月有几天
- File 类
- ehcache memcache redis三大缓存男高音
- AndroidStudio项目提交(更新)到github最详细步骤
- hdu 5651 (组合数学 + 阶乘求逆元)
- uestc1134男神的约会【状压dp】