关于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 是在集合内部 ...
随机推荐
- COMMIT WORK AND WAIT 是在WAIT什么
wait 还是不wait,这是个问题. 这是同步更新还是异步更新的问题:如果是只commit work,是异步更新,触发注册在当前SAP LUW中所有数据更新动作,数据更新动作由SAP的更 ...
- 实验12:Problem H: 整型数组运算符重载
Home Web Board ProblemSet Standing Status Statistics Problem H: 整型数组运算符重载 Problem H: 整型数组运算符重载 Tim ...
- yii url美化 urlManager组件
yii的官方文档对此的解释如下: urlSuffix 此规则使用的url后缀,默认使用CurlManger::urlSuffix,值为null.例如可以将此设置为.html,让url看起来“像”是一 ...
- JSP Model模式
用JSP开发的Web应用模型可以分为Model1和Model2 对于小型的Web应用,通常可以使用模型1来完成. 模型1可以分为两种方式: 一种是完全使用JSP页面来开发Web应用: 另一种是使用JS ...
- 高精度练习(hdoj1042)
Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N in ...
- C++非类型模板参数
对于函数模板与类模板,模板参数并不局限于类型,普通值也可以作为模板参数.在基于类型参数的模板中,你定义了一些具体的细节来加以确定代码,直到代码被调用时这些细节才被真正的确定.但是在这里,我们面对的是这 ...
- 学习C语言的数组
C语言的数组 数组声明的实例:int num[3];只要记下这个模板就好. 不建议使用变量定义数组,如果使用了变量定义数组,作为数组的元素的个数,不初始化的情况下是随机值,如果初始化会直接报错 注意: ...
- 集成ZBar时容易遇到的问题以及解决方法
1.添加入几个必备的框架: libiconv.tbd QuartzCore.framework CoreVideo.framework CoreMedia.framework AVFoundation ...
- js动态加载css文件和js文件的方法
今天研究了下js动态加载js文件和css文件的方法. 网上发现一个动态加载的方法.摘抄下来,方便自己以后使用 [code lang="html"] <html xmlns=& ...
- 《ASP.NET MVC 5 框架揭秘》
<ASP.NET MVC 5 框架揭秘> 基本信息 作者: 蒋金楠 出版社:电子工业出版社 ISBN:9787121237812 上架时间:2014-8-1 出版日期:2014 年8月 开 ...