/*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. 聊聊"jQuery is not defined"

    KiwenLau同学在他的个人博客使用了Fundebug的JavaScript错误监控插件,然后偶尔会收到jQuery is not defined这样的错误报警: 他的博客使用了Staticfile ...

  2. 3402: [Usaco2009 Open]Hide and Seek 捉迷藏

    3402: [Usaco2009 Open]Hide and Seek 捉迷藏 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 78  Solved: 6 ...

  3. CoreGraphics--饼状图

    //传入数据,饼状图 pieChartView.dataArr = @[@20,@50,@80,@70,@40]; - (void)drawRect:(CGRect)rect { // Drawing ...

  4. django进阶-3

    先看效果图: 登陆admin后的界面: 查看作者: 当然你也可以定制admin, 使界面更牛逼 数据库表结构: app01/models.py from django.db import models ...

  5. MyBatis快速入门(一)

    一.MyBatis背景介绍 MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的 ...

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

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

  7. OpenStack_Glance

    什么是Glace Glance即image service(镜像服务),就是为创建虚拟机提供镜像的地方 为什么要有Glance 这个问题问的好,openstack就是构建Iaas平台对外提供虚拟机的啊 ...

  8. 移动端ios 输入框fixed固定在底部 焦点时乱跳加遮盖问题的解决 转自zhangyunling 加个人项目解决方案

    如果您有过移动端的开发经验,那么您是否碰到过这样的问题,一个页面有输入框,当这个输入框聚焦时,输入框在IOS下,被移动到手机屏幕的当中去了,而在Android端,有些浏览器的输入框,会被键盘盖住. 1 ...

  9. Xshell连接本地 Virtualbo Ubuntu

    1.打开Virtualbox软件,启动ubuntu虚拟机. Ctrl + Alt + T 打开终端输入一下命令: sudo apt-get update 然后安装ssh 输入:sudo apt-get ...

  10. IOS开发创建开发证书及发布App应用(七)——在iTunes创建填写应用基本信息

    7.在iTunes创建填写应用基本信息 依旧打开苹果的开发者网站 https://developer.apple.com/ 点击Member,如下图 (注意,下面的图示是登录之后的) 点击iTunes ...