/*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. Digital Tutors - Creating an Action Adventure Puzzle in Unity学习笔记

    遇到的问题: 1 第11节Scripting the pressure plates中需要获取子物体的Animator组件,教程使用的语句如下: ”SwitchAnim = GetComponentI ...

  2. [lua] 你所不知道的lua nil值在可变参数函数中怎么处理!

    在lua中, 问题1:如果你在可变参数...中传入若干个参数,其中有的参数要带nil,这时怎么解决呢?(比如local function _test(...) end    _test(1, nil, ...

  3. ThinkPhp框架:验证码功能

    Think\Verify类可以支持验证码的生成和验证功能. 为了显示这个验证码功能,第一要有控制器,再就是有方法,然后是显示的页面. 一.最简单的方式生成验证码 (1)我们还是继续在那个控制器编写方法 ...

  4. web从入门开始(1)------简介

    服务端与客户端 HTML简介

  5. SQL Server--获取磁盘空间使用情况

    对于DBA来说,监控磁盘使用情况是必要的工作,然后没有比较简单的方法能获取到磁盘空间使用率信息,下面总结下这些年攒下的脚本: 最常用的查看磁盘剩余空间,这个属于DBA入门必记的东西: -- 查看磁盘可 ...

  6. Dapper源码学习和源码修改

    之前ORM比较火热,自己也搞了个WangSql,但是感觉比较low,大家都说Dapper性能好,所以现在学习学习Dapper,下面简单从宏观层面讲讲我学习的Dapper. 再了解一个东西前,先得学会使 ...

  7. Struts2(二)之封装请求正文、数据类型转换、数据验证

    一.封装请求正文到对象中(重点) 1.1.静态参数封装 在struts.xml文件中,给动作类注入值,使用的是setter方法 1.2.动态参数封装 通过用户表单封装请求正文参数 1.2.1.动作类作 ...

  8. 一行命令创建 http-server

    一行命令启动http-server总结:1. python2.xpython2 -m SimpleHTTPServer 8000 2. python3.xpython -m http.server 8 ...

  9. Android基本控件和事件以及消息总结

    Android学生空间界面设计涉及到的常用基本控件有TextView,EditText,Button,ImageView,CheckBox,RadioButton,基本事件有触屏和键盘事件,包括onT ...

  10. 获取VB类模块成员函数指针(转)

    最近在做一些VB6.VBA的项目,被如何获取类模块中的函数指针这个问题所困扰,收集整理后,有2分资料值得收藏,特将关键部分留存,以备后续查找. 参照连接1:http://www.cnblogs.com ...