/*TreeSet
* treeSet存入数据后自动调用元素的compareTo(Object obj) 方法,自动对数据进行排序
* 所以输出的数据是经过排序的数据
* 注:compareTo方法返回值有:负数,零,正数。分别表示小于,等于,大于
* 对于存入自定义的对象元素,要重写元素的compareTo(Object obj)方法
* 元素定义时,需要实现Comparable接口
* */

 import java.util.Iterator;
import java.util.TreeSet;
public class StudentCode { public static void main(String []args){
//定义TreeSet对象,并赋值java存在的对象
TreeSet ts1=new TreeSet();
ts1.add("java10");
ts1.add("java01");
ts1.add("java08");
ts1.add("java04");
//输出对象的值,是经过排序的数据
System.out.println(ts1);
//定义TreeSet对象,并赋值自定义的对象
TreeSet ts2=new TreeSet();
ts2.add(new Person("ls",11));
ts2.add(new Person("zs",22));
ts2.add(new Person("ls",13));
ts2.add(new Person("ls",11));
//输出对象,也是经过排序的数据
for(Iterator it=ts2.iterator();it.hasNext();){
Person p=(Person)it.next();
System.out.println("姓名:"+p.getName()+",年龄:"+p.getAge());
}
}
}
//自定义数据,需要实现Comparable接口
class Person implements Comparable{
private String name;
private int age;
Person(String name,int age){
this.name=name;
this.age=age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
//重写compareTo()方法,
public int compareTo(Object obj){
if(!(obj instanceof Person))
throw new RuntimeException("不是Person对象");
Person p =(Person)obj;
if(this.age>p.getAge()){
return 1;
}
else if(this.age<p.getAge()){
return -1;
}else{
return this.name.compareTo(p.getName());
}
}
}
 /*TreeSet
* treeSet当元素不具备比较性,或者比较性不是所需要的时候,
* 可以使treeSet集合具有比较性。
* 定义比较器,并将比较器作为参数传给TreeSet集合
* 比较器需要实现Comparator接口
* 当元素具备比较性和比较器同时出现时,以比较器为准。
* */
 import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class StudentCode { public static void main(String []args){
//定义TreeSet对象,并传入比较器
TreeSet ts2=new TreeSet(new MyCompareble());
ts2.add(new Person("ls",11));
ts2.add(new Person("zs",22));
ts2.add(new Person("ls",13));
ts2.add(new Person("ls",11));
//输出对象
for(Iterator it=ts2.iterator();it.hasNext();){
Person p=(Person)it.next();
System.out.println("姓名:"+p.getName()+",年龄:"+p.getAge());
}
}
}
//定义比较器 — — — — 以姓名为第一顺序,年龄为第二顺序
class MyCompareble implements Comparator{
//实现比较器里面的compare方法
public int compare(Object o1,Object o2){
Person p1=(Person)o1;
Person p2=(Person)o2;
int num=p1.getName().compareTo(p2.getName());
if(num==0){
return new Integer(p1.getAge()).compareTo(new Integer(p2.getAge()));
}
return num;
}
} //自定义数据,需要实现Comparable接口 — — — — 以年龄为第一顺序,姓名为第二顺序
class Person implements Comparable{
private String name;
private int age;
Person(String name,int age){
this.name=name;
this.age=age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
//重写compareTo()方法,
public int compareTo(Object obj){
if(!(obj instanceof Person))
throw new RuntimeException("不是Person对象");
Person p =(Person)obj;
if(this.age>p.getAge()){
return 1;
}
else if(this.age<p.getAge()){
return -1;
}else{
return this.name.compareTo(p.getName());
}
}
}

java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)的更多相关文章

  1. java集合框架(hashSet自定义元素是否相同,重写hashCode和equals方法)

    /*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不一致,元素不可以重复 * (通过哈希值来判断是否是同一个对象) * ----HashSet:底层数据结构是哈希表, * 保证 ...

  2. java 集合框架(List操作)

    /*list 基本操作 * * List a=new List(); * 增 * a.add(index,element);按指定位置添加,其余元素依次后移 * addAll(index,Collec ...

  3. Java集合框架常见面试题

    点击关注公众号及时获取笔主最新更新文章,并可免费领取本文档配套的<Java面试突击>以及Java工程师必备学习资源. 剖析面试最常见问题之Java基础知识 说说List,Set,Map三者 ...

  4. 关于Java集合框架总结

    Java集合专门用来存放多个对象,方便程序处理数据.Java提供了多种集合类,以便满足不同的应用需求,这些集合类分为两大系列:Collection和Map List List的通用方法 boolean ...

  5. Java集合框架和数组的排序(转载)

    Java集合框架(*Collection)*和数组的排序 ​ 根据约定,在使用java编程的时候应尽可能的使用现有的类库,当然你也可以自己编写一个排序的方法,或者框架,但是有几个人能写得比JDK里的还 ...

  6. 【java集合框架源码剖析系列】java源码剖析之TreeSet

    本博客将从源码的角度带领大家学习TreeSet相关的知识. 一TreeSet类的定义: public class TreeSet<E> extends AbstractSet<E&g ...

  7. Java集合框架之TreeSet浅析

    Java集合框架之TreeSet浅析 一.TreeSet综述: 1.1TreeSet简介: TreeSet是Java集合框架的重要成员,先来看看TreeSet在jdk1.8中的定义吧: public ...

  8. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  9. 【转】Java集合框架List,Map,Set等全面介绍

    原文网址:http://android.blog.51cto.com/268543/400557 Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含 ...

随机推荐

  1. .NET Core 1.1日期解析无APi、SQL Server数据转换JSON

    前言 在批量导入Excel中的数据时发现出生日期为整数也就是为天数,结果倒腾了翻,这是其一,其二是数据库中的某一列存的是JSON数据,但是场景是为了作为作业来运行,此时不得不将筛选出的数据手动拼接成J ...

  2. 队列工厂之(MSMQ)

    最近vs2017神器正式版发布让人很是激动,vs2017支持了很多语言的开发,从前端-后端-底层的支持,堪称是工具中的神器:netcore我喜爱的架构之一也得到了大力的宣传,应群友的邀请将在队列工厂( ...

  3. 2272: [Usaco2011 Feb]Cowlphabet 奶牛文字

    2272: [Usaco2011 Feb]Cowlphabet 奶牛文字 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 138  Solved: 97 ...

  4. JAVA面试题和答案

    本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Java和它的功能 ...

  5. C++ IO学习

    关于IO,主要有这么三种类型:标准输入输出,文件输入输出,字符串流.后面两种都是继承自第一种标准输入输出的.他们分别对应的头文件是: 标准输入输出:#include <iostream> ...

  6. .NET Core中的包、元包与框架

    本文为翻译文章,原文:Packages, Metapackages and Frameworks .NET Core是一个由NuGet包组成的平台.一些产品受益于细粒度包的定义,也有一些受益于粗粒度包 ...

  7. TimeUnit枚举类

    TimeUnit是  java.util.concurrent 中的一个枚举类.一般让线程进行睡眠时使用: TimeUnit.MILLISECONDS.sleep(100); 比如上面一行代码表示让当 ...

  8. php多进程编程详解

    php多进程编程 前言 php单进程存在的问题: 多核处理器未充分利用,而单处理器通常需要等待其他操作完成之后才能再继续工作. 任何现代操作系统都可在幕后执行多任务,这意味着在很短时间内,计算机可以调 ...

  9. 在x64位的操作系统客户端如何连接oracle ?

    好久没更新博客了,上周在x64位的操作系统中安装好了32位或64位的oracle 11g客户端,但用SSIS或Microsoft SQL Server 2012报表生成器3.0去连接oracle 11 ...

  10. Python之xml文档及配置文件处理(ElementTree模块、ConfigParser模块)

    本节内容 前言 XML处理模块 ConfigParser/configparser模块 总结 一.前言 我们在<中我们描述了Python数据持久化的大体概念和基本处理方式,通过这些知识点我们已经 ...