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的用法(即自定义集合框架用法 )的更多相关文章

  1. 【集合框架】JDK1.8源码分析之Comparable && Comparator(九)

    一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Comparator,虽然它们与集合没有显示的关系,但是它们只有在集合里面的时候才能发挥最大的威力.下面是开始我 ...

  2. comparable and comparator 比较

      转:http://www.yingjiesheng.com/job-002-393-132.html 一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Com ...

  3. Comparable和Comparator的区别&Collections.sort的两种用法

    在Java集合的学习中,我们明白了: 看到tree,可以按顺序进行排列,就要想到两个接口.Comparable(集合中元素实现这个接口,元素自身具备可比性),Comparator(比较器,传入容器构造 ...

  4. Map集合的遍历方式以及TreeMap集合保存自定义对象实现比较的Comparable和Comparator两种方式

    Map集合的特点 1.Map集合中保存的都是键值对,键和值是一一对应的 2.一个映射不能包含重复的值 3.每个键最多只能映射到一个值上 Map接口和Collection接口的不同 Map是双列集合的根 ...

  5. Comparable 和 Comparator的理解

    对Comparable 的解释 Comparable是一个排序接口 此接口给实现类提供了一个排序的方法,此接口有且只有一个方法 public int compareTo(T o); compareTo ...

  6. Java Comparable 和 Comparator 接口详解

    本文基于 JDK8 分析 Comparable Comparable 接口位于 java.lang 包下,Comparable 接口下有一个 compareTo 方法,称为自然比较方法.一个类只要实现 ...

  7. Comparable和Comparator的区别

    Comparable Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较 ...

  8. Java中Comparable和Comparator区别小结

    一.Comparable简介 Comparable是排序接口.若一个类实现了Comparable接口,就意味着该类支持排序.实现了Comparable接口的类的对象的列表或数组可以通过Collecti ...

  9. Comparable与Comparator

    转载 Comparable与Comparator的区别 (转载) Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部 ...

随机推荐

  1. 利用多写Redis实现分布式锁原理与实现分析(转)

    利用多写Redis实现分布式锁原理与实现分析   一.关于分布式锁 关于分布式锁,可能绝大部分人都会或多或少涉及到. 我举二个例子:场景一:从前端界面发起一笔支付请求,如果前端没有做防重处理,那么可能 ...

  2. [翻译]:SQL死锁-阻塞

    一般情况下死锁不是一步到位的,它必须满足特定的条件,然后形成资源的循环依赖才会产生死锁,死锁之前一定会出现阻塞,由阻塞升级才有可能出现死锁,所以我们有必要了解系统中都有哪些已经被阻塞的锁. 我在解决共 ...

  3. 【GOF23设计模式】原型模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_原型模式.prototype.浅复制.深复制.Cloneable接口  浅复制 package com.test.prot ...

  4. SAP中的Currency Converting Factor

    ABAP编程中,有个概念很重要,即Currency Converting Factor(货币转换因子).可能很多ABAP初学者都不知道这是什么东西,这里我们就简单探讨下. 1. 什么是货币转换因子 在 ...

  5. RecyclerView和ScrollView嵌套使用

    我们的recyclerView有多个layoutmanager,通过重写layoutmanager的方法就可以让recyclerView和ScrollView嵌套了.但是请注意,如果recyclerV ...

  6. 利用在线工具根据JSon数据自动生成对应的Java实体类

    如果你希望根据JSon数据自动生成对应的Java实体类,并且希望能进行变量的重命名,那么“JSON To Java”一定适合你.(下面的地址需要FQ) https://jsontojava.appsp ...

  7. android ButterKnife 解决重复findViewById

    简介: 程序员都是懒惰的,不想写一大堆像下面这样的代码 class ExampleActivity extends Activity { TextView title; TextView subtit ...

  8. Android 开发组件

    每一个应用程序都有自己独立的运行沙盒(授予应用程序代码的访问权) Android操作系统是一个多用户的Linux系统,其中的每一个应用程序都是一个独立的用户. 系统会为每一个应用程序分配一个唯一的Li ...

  9. Android实战--短信发送器

    首先设计界面 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...

  10. 高精度练习(hdoj1042)

    Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!   Input One N in ...