关于comparable与comparator的用法(即自定义集合框架用法 )
package javastudy; import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class Ptext { public static void main(String[] args) {
// TODO Auto-generated method stub
//关于comparable的用法:以Person为例进行排序:
/**用法声明
* 1。建立一个Person类,并定义name,age
* 2.建立Person的构造函数
* 3.建立Person集合框架,并在数组中赋值,遍历打印输出。
* 4.运行,会报错,原因是两个不能比较,所以在此要建立比较方法
* 5.在Person中继承comparable,并重写方法。
* 6.根据api中内容,定义比较值还回-1,1,0.
* 7.运行
* */
TreeSet<Person> ts = new TreeSet<Person>();
ts.add(new Person("Mark",12));
ts.add(new Person("Keven",16));
ts.add(new Person("Bob",20));
ts.add(new Person("Jine",19));
for(Iterator<Person> it=ts.iterator();it.hasNext();)
{
Person p = it.next();
p.show();
System.out.println(it.next());
}
//自己建立一个比较器,即comparator的用法,以Dog为例进行;
/**
* 1.与person类似,建立Dog类,并定义name,weight;
* 2.建立构造方法;
* 3.打印输出或者建立toString方法(原因,如果不建立打印输出方法,在主函数中遍历是会出现javastudy.Person@4aa298b7这种类型)
* 4。在主函数中建立自定义Dog的集合数组,
* 5.建立一个自定义比较器,MyCom并集成Comparator
* 6.定义比较方法
* 7.运行。
* */
TreeSet<Dog> ds = new TreeSet<Dog>(new MyCom());
ds.add(new Dog("Mark",12));
ds.add(new Dog("Keven",16));
ds.add(new Dog("Bob",20));
ds.add(new Dog("Jine",19));
for(Iterator<Dog> it=ds.iterator();it.hasNext();)
{
System.out.println(it.next());
}
} } class Person implements Comparable<Person> {
String name;
int age;
Person(String name,int age)
{
this.name=name;
this.age=age;
}
void show(){
System.out.println(String.format("姓名=%s,年龄=%d", name,age));
} public int compareTo(Person o) {
// TODO Auto-generated method stub
if(this.age < o.age)
{
return 1;
}
else if(this.age>o.age)
{
return -1;
}
else
{
return 0;
}
}
}
//关于comparator的用法,即DOG例子说明; class MyCom implements Comparator<Dog>
{ @Override
public int compare(Dog arg0, Dog arg1) {
// TODO Auto-generated method stub
//这里与return 1 ,-1,0.的用法一样,这是简写。
//注:因为建立的自定义比较Dog1,与dog2,所以这里两种方法都可以使用。而第一种只是利用comparable不行。
return arg0.name.compareTo(arg1.name);
} }
class Dog
{
String name;
int weight;
Dog(String name,int weight)
{
this.name=name;
this.weight=weight;
}
@Override
public String toString() {
return "Dog [name=" + name + ", weight=" + weight + "]";
}
}
关于comparable与comparator的用法(即自定义集合框架用法 )的更多相关文章
- 【集合框架】JDK1.8源码分析之Comparable && Comparator(九)
一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Comparator,虽然它们与集合没有显示的关系,但是它们只有在集合里面的时候才能发挥最大的威力.下面是开始我 ...
- comparable and comparator 比较
转:http://www.yingjiesheng.com/job-002-393-132.html 一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Com ...
- Comparable和Comparator的区别&Collections.sort的两种用法
在Java集合的学习中,我们明白了: 看到tree,可以按顺序进行排列,就要想到两个接口.Comparable(集合中元素实现这个接口,元素自身具备可比性),Comparator(比较器,传入容器构造 ...
- Map集合的遍历方式以及TreeMap集合保存自定义对象实现比较的Comparable和Comparator两种方式
Map集合的特点 1.Map集合中保存的都是键值对,键和值是一一对应的 2.一个映射不能包含重复的值 3.每个键最多只能映射到一个值上 Map接口和Collection接口的不同 Map是双列集合的根 ...
- Comparable 和 Comparator的理解
对Comparable 的解释 Comparable是一个排序接口 此接口给实现类提供了一个排序的方法,此接口有且只有一个方法 public int compareTo(T o); compareTo ...
- Java Comparable 和 Comparator 接口详解
本文基于 JDK8 分析 Comparable Comparable 接口位于 java.lang 包下,Comparable 接口下有一个 compareTo 方法,称为自然比较方法.一个类只要实现 ...
- Comparable和Comparator的区别
Comparable Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较 ...
- Java中Comparable和Comparator区别小结
一.Comparable简介 Comparable是排序接口.若一个类实现了Comparable接口,就意味着该类支持排序.实现了Comparable接口的类的对象的列表或数组可以通过Collecti ...
- Comparable与Comparator
转载 Comparable与Comparator的区别 (转载) Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部 ...
随机推荐
- .NET Framework 4.0之Tuple(元组)
Tuple,是函数式编程的概念之一,早见于Elang.F#等动态语言.Tuple类型像一个口袋,在出门前可以把所需的任何东西一股脑地放在里面.您可以将钥匙.驾驶证.便笺簿和钢笔放在口袋里,您的口袋是存 ...
- 【GOF23设计模式】代理模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_代理模式.静态代理 package com.test.proxy.staticProxy; public interfac ...
- 【GOF23设计模式】原型模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_原型模式.prototype.浅复制.深复制.Cloneable接口 浅复制 package com.test.prot ...
- 奇怪的float
我在项目的实践中遇到了这样的一个问题 <div class="main"> <p>aaaa</p> <p>bbbb</p> ...
- .NET破解之百度网盘批量转存工具
在百度网盘上看到好的资源,总想转存到自己的网盘,加以整理.由于分享的规则原因,手动转存非常麻烦,于是百度批量转存工具.最先搜到的是小兵的百度云转存助手,无需注册,试用版用户一次只能操作10个,而捐助用 ...
- SharePoint 2010 类似人人网站内信功能实施
简介:用SharePoint代码加实施的方式,完成类似人人网站内信功能,当然,实现的比较简单,样式也比较难看,只为给大家一个实施的简单思路,如有谬误,还请见谅.当然,还有就是截图比较长,当然为了让大家 ...
- java.lang.RuntimeException: Fail to connect to camera service问题
做音视频录制功能的真机调试的时候出现这个问题 错误意思为无法连接到相机服务 可能由两种情况导致 1.配置清单文件没有设置相应的权限 <uses-permission android:name=& ...
- CentOS6.5上编译OpenJDK7源码
本文地址:http://www.cnblogs.com/wuyudong/p/build-openjdk7.html,转载请注明源地址. 采用开源的OpenJDK版本,获取其源码的方式有两种: 通Me ...
- UI交互设计的网站
1.http://www.xueui.cn/other-tutorials/ui-interaction-design.html 2.http://www.3lian.com/edu/2015/12- ...
- Android Design Support Library——Snackbar
Snackbar是一个轻量级控件,它可以很方便的提供消息的提示和动作反馈,类似于Toast.Snackbar包括一段文字信息与一个可选的操作按钮,超时自动隐藏,也可以通过滑动来删除.效果如下所示: S ...