/*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. 每天一个Linux命令 6

    rpm包管理--yum在线管理 ip地址配置和网络yum源ip地址配置 #setup 使用setup工具 #vi /etc/sysconfig/network-scripts/ifcfg-eth0把O ...

  2. 当前最上层的视图控制器vc 和 当前最上层的导航控制器nav

    在处理 URL Router 跳转的时候,我们经常需要得到 当前最上层的视图控制器 和 当前最上层的导航控制器 来进行视图跳转或者方法调用.- (UIViewController *)currentV ...

  3. 利用cropper插件裁剪本地图片,然后将裁剪过后的base64图片上传至七牛云空间

    现在做的项目需要做一些图片处理,由于时间赶急,之前我便没有处理图片,直接将图片放在input[type=file]里面,以文件的形式提交给后台,这样做简直就是最低级的做法,之后各种问题便出来了,人物头 ...

  4. 一道面试题引发的pythonic

    一道测试工程师面试题(来自搜狗): 自己写了解法: # -*- coding: utf-8 -*- import re #从整体log中过滤出有用的部分,缩小搜索范围 def filter_log(t ...

  5. 【转载】扩展Robot Framework,实现失败用例自动再执行(失败重跑)

    使用自动化脚本进行测试,经常受环境影响等各方面导致本能成功的脚本失败,下面介绍了RFS框架下,失败重跑的方法: 通过改写RobotFramework源代码增加--retry选项,实现test级别的失败 ...

  6. HTML标签自定义属性

    本文章转载至:http://www.cnblogs.com/luoyanli/archive/2012/10/17/2727886.html HTML标签可以自定义属性,但是我们要考虑其在IE.Fir ...

  7. Chapter 3. Programming with RDDs

     Programming with RDDs This chapter introduces Spark's core abstraction for working with data, the r ...

  8. (17)IO中的异常处理

    public static void copyImage() throws IOException { //找到目标文件 File inFile = new File("D:\\1.jpg& ...

  9. ASP.NET Core MVC之ViewComponents(视图组件)

    前言 大概一个来星期未更新博客了,久违了各位,关于SQL Server性能优化会和ASP.NET Core MVC穿插来讲,如果你希望我分享哪些内容可以在评论下方提出来,我会筛选并看看技术文档来对你的 ...

  10. Android中查看布局文件中的控件(view,id)在哪里被调用(使用)

    在阅读别人的代码时通常是很痛苦的,有时很想要看一看布局中的控件在哪里被调用了,为之很苦恼 在这里提供一种方法.   复制要查看的控件ID,到R文件中搜索到该ID,   接下来就好办的了,选中ID按下C ...