java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)
/*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方法)的更多相关文章
- java集合框架(hashSet自定义元素是否相同,重写hashCode和equals方法)
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不一致,元素不可以重复 * (通过哈希值来判断是否是同一个对象) * ----HashSet:底层数据结构是哈希表, * 保证 ...
- java 集合框架(List操作)
/*list 基本操作 * * List a=new List(); * 增 * a.add(index,element);按指定位置添加,其余元素依次后移 * addAll(index,Collec ...
- Java集合框架常见面试题
点击关注公众号及时获取笔主最新更新文章,并可免费领取本文档配套的<Java面试突击>以及Java工程师必备学习资源. 剖析面试最常见问题之Java基础知识 说说List,Set,Map三者 ...
- 关于Java集合框架总结
Java集合专门用来存放多个对象,方便程序处理数据.Java提供了多种集合类,以便满足不同的应用需求,这些集合类分为两大系列:Collection和Map List List的通用方法 boolean ...
- Java集合框架和数组的排序(转载)
Java集合框架(*Collection)*和数组的排序 根据约定,在使用java编程的时候应尽可能的使用现有的类库,当然你也可以自己编写一个排序的方法,或者框架,但是有几个人能写得比JDK里的还 ...
- 【java集合框架源码剖析系列】java源码剖析之TreeSet
本博客将从源码的角度带领大家学习TreeSet相关的知识. 一TreeSet类的定义: public class TreeSet<E> extends AbstractSet<E&g ...
- Java集合框架之TreeSet浅析
Java集合框架之TreeSet浅析 一.TreeSet综述: 1.1TreeSet简介: TreeSet是Java集合框架的重要成员,先来看看TreeSet在jdk1.8中的定义吧: public ...
- Java集合框架List,Map,Set等全面介绍
Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +- ...
- 【转】Java集合框架List,Map,Set等全面介绍
原文网址:http://android.blog.51cto.com/268543/400557 Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含 ...
随机推荐
- Digital Tutors - Creating an Action Adventure Puzzle in Unity学习笔记
遇到的问题: 1 第11节Scripting the pressure plates中需要获取子物体的Animator组件,教程使用的语句如下: ”SwitchAnim = GetComponentI ...
- [lua] 你所不知道的lua nil值在可变参数函数中怎么处理!
在lua中, 问题1:如果你在可变参数...中传入若干个参数,其中有的参数要带nil,这时怎么解决呢?(比如local function _test(...) end _test(1, nil, ...
- ThinkPhp框架:验证码功能
Think\Verify类可以支持验证码的生成和验证功能. 为了显示这个验证码功能,第一要有控制器,再就是有方法,然后是显示的页面. 一.最简单的方式生成验证码 (1)我们还是继续在那个控制器编写方法 ...
- web从入门开始(1)------简介
服务端与客户端 HTML简介
- SQL Server--获取磁盘空间使用情况
对于DBA来说,监控磁盘使用情况是必要的工作,然后没有比较简单的方法能获取到磁盘空间使用率信息,下面总结下这些年攒下的脚本: 最常用的查看磁盘剩余空间,这个属于DBA入门必记的东西: -- 查看磁盘可 ...
- Dapper源码学习和源码修改
之前ORM比较火热,自己也搞了个WangSql,但是感觉比较low,大家都说Dapper性能好,所以现在学习学习Dapper,下面简单从宏观层面讲讲我学习的Dapper. 再了解一个东西前,先得学会使 ...
- Struts2(二)之封装请求正文、数据类型转换、数据验证
一.封装请求正文到对象中(重点) 1.1.静态参数封装 在struts.xml文件中,给动作类注入值,使用的是setter方法 1.2.动态参数封装 通过用户表单封装请求正文参数 1.2.1.动作类作 ...
- 一行命令创建 http-server
一行命令启动http-server总结:1. python2.xpython2 -m SimpleHTTPServer 8000 2. python3.xpython -m http.server 8 ...
- Android基本控件和事件以及消息总结
Android学生空间界面设计涉及到的常用基本控件有TextView,EditText,Button,ImageView,CheckBox,RadioButton,基本事件有触屏和键盘事件,包括onT ...
- 获取VB类模块成员函数指针(转)
最近在做一些VB6.VBA的项目,被如何获取类模块中的函数指针这个问题所困扰,收集整理后,有2分资料值得收藏,特将关键部分留存,以备后续查找. 参照连接1:http://www.cnblogs.com ...