import java.util.*;

public class Person implements Comparable<Person>//使Person的属性具有比较性

{

private String name;

private int age;

public Person(String name,int age)//初始化构造函数

{

this.name = name;

this.age = age;

}

public void set(String name,int age)//重新设置姓名和年龄

{

this.name = name;

this.age = age;

}

public String getName()//获取姓名

{

return name;

}

public int getAge()//获取年龄

{

return age;

}

public String toString()//将姓名和年龄以字符串的形式返回

{

return name+","+age;

}

//出现重名时,再找到另一个hash地址用来存储数据(底层自动调用)

public int hashCode()

{

return name.hashCode()+age*34;

}

//判断接受的类是不是Person类,不是就抛出异常(底层自动调用)

public boolean equals(Object obj)

{

if(!(obj instanceof Person))

throw new ClassCastException("不是Person类");

Person p = (Person)obj;

return this.name.equals(p.name) && this.age==p.age;

}

public int compareTo(Person p)//(按照自己的要求去作比较)

{

int num=new Integer(this.age).compareTo(p.age);

return num==0?this.name.compareTo(p.name):num;

}

}

public class Test

{

public static <T>void sop(T t) //使用泛型接收参数

{

System.out.println(t);

}

public static void main(String args[]) throws Exception

{

//创建一个map集合,用来存储数据  <>表示接收的是泛型,即指定的类型

TreeMap<Person,String> map = new TreeMap<Person,String>(/*new Mycompare()*/); //也可以使用这个被注释掉的自定义的比较器

//往集合添加数据

map.put(new Person("czhangsan1",11),"beijing");

map.put(new Person("zhangsan5",15),"nanjing");

map.put(new Person("azhangsan5",10),"shanghai");

map.put(new Person("zhangsan2",20),"haierbing");

map.put(new Person("bzhangsan2",20),"beijing");

map.put(new Person("zhangsan3",12),"shanghai");

map.put(new Person("zhangsan4",19),"changchun");

map.put(new Person("zhangsan4",10),"changchun");

map.put(new Person("zhangsan4",10),"zhengzhou");

//将map集合转换为set集合,因为map集合没有迭代器  ,而set集合有

Set<Map.Entry<Person,String>> entryset = map.entrySet();

//获取迭代器

Iterator<Map.Entry<Person,String>> it = entryset.iterator();

//用迭代器取数据

while(it.hasNext())

{

Map.Entry<Person,String> m = it.next();

Person key = m.getKey();//取出键

String value =m.getValue();//取出值

sop(key+"......."+"adress:"+value);//打印键和值

}

}

}

class Mycompare implements comparator<Perosn>//自定义一个比较器

{

public int compare(Person p1,Person p2)

{

int num = p1.getName().compareTo(p2.getName());

return num==0?new Integer(p1.getAge()).compareTo(new Integer(p2.getAge())):num;

}

}

//注意:上面的两种形式都实现了比较,任选其中一种就可以。要么实现comparable接口;要么在集合中传入自定义的比较器。

java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)的更多相关文章

  1. Java://Comparator、Comparable的用法(按照要求将set集合的数据进行排序输出):

    import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; //comparator. ...

  2. 【Java必修课】通过Value获取Map中的键值Key的四种方法

    1 简介 我们都知道Map是存放键值对<Key,Value>的容器,知道了Key值,使用方法Map.get(key)能快速获取Value值.然而,有的时候我们需要反过来获取,知道Value ...

  3. Java分享笔记:使用entrySet方法获取Map集合中的元素

    /*--------------------------------- 使用entrySet方法取出Map集合中的元素: ....该方法是将Map集合中key与value的关系存入到了Set集合中,这 ...

  4. Java分享笔记:使用keySet方法获取Map集合中的元素

    /*--------------------------- Map集合中利用keySet方法获取所有的元素值: ....keySet方法:将Map中的所有key值存入到Set集合中, ....利用Se ...

  5. LeetCode 677. Map Sum Pairs 键值映射(C++/Java)

    题目: Implement a MapSum class with insert, and sum methods. For the method insert, you'll be given a ...

  6. JAVA Comparator 接口排序用法

    java的比较器有两类,分别是Comparable接口和Comparator接口. 在为对象数组进行排序时,比较器的作用非常明显,首先来讲解Comparable接口. 让需要进行排序的对象实现Comp ...

  7. Java程序斗地主发牌代码,List、Map集合的应用

    Java集合存储的灵活运用List集合存储 54个编号 Map <key,value> key 对应的是编号 , value 是 牌的花色(红方梅黑)+ 具体的一张牌 ,比如 黑桃2 用2 ...

  8. Java——删除Map集合中key-value值

    通过迭代器删除Map集合中的key-value值 Iterator<String> iter = map.keySet().iterator(); while(iter.hasNext() ...

  9. java学习笔记—集合之Map集合

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 12.0px Times } p.p2 { margin: 0.0p ...

随机推荐

  1. LNMP平台搭建---MySQL安装篇

    在前两篇中,安装了一个基本的Web服务器,但是只能提供静态网页查看,要做成动态网站,就必须要数据库或其他编程语言支持了,这里先介绍MySQL数据库的安装. MySQL是一个开源的数据库,在互联网行业应 ...

  2. unity3d中串口的使用

    工作中遇到了串口的问题,通过查资料&实验写出了下面代码: 关于串口的代码我在网上看了好多,一种是用事件来做,另外一种使用线程来做:(经过试验,unity无法用串口自带的事件进行数据读取): 看 ...

  3. [译]:Orchard入门——媒体文件的添加与管理

    原文链接:Adding and Managing Media Content 注:此文内容相对较老,实际操作指导性不强,仅适合做研究 当你利用富文本编辑器上传图片时(或者使用XML-RPC客户端,例如 ...

  4. Visual Studio 2015 前瞻 属性初始化赋值!

    通常我们建立属性的时候如果带初始化值的时候我们经常会这样处理. class MyClass { private string _name = "hello world!"; pub ...

  5. npm 安装不了模块

    npm install 不能安装模块 先卸载npm,然后再重新安装 sudo npm uninstall npm -g 如果上面卸载不了,则进入到npm的安装目录(which npm): sudo m ...

  6. Timer计时器

    private Timer timer; timer.schedule(new TimerTask() { @Override public void run() { if (isStopedReco ...

  7. 关于Xcode8.1 / iOS10+ 真机测试系统打印或者宏定义打印不显示问题

    前言: 最近做项目时遇到了很多莫名其妙的问题,其中就有这个打印(NSLog).也不多废话了,我们先来回顾一下Xcode8发布以来,我们遇到的一些关于打印的问题,当然也有解决方法: 1.Xcode8打印 ...

  8. ArrayList数组列表

    ArrayList数组列表 Collection接口和List接口的区别 List接口扩充了Collection接口,添加了索引相关的方法. code example Object get(int i ...

  9. EasyTouch绑定事件在电脑上点击有效Android上无效的解决方法

    最近做一个RPG类的游戏发现使用EasyTouch虚拟摇杆插件在电脑上点击有效Android上无效,查找资料发现是Easy Joystick中的一个属性interaction type要设置成 Dir ...

  10. struts-json-plugin result中配置对象的序列化

    注意: 在使用strtus-json-plugin序列化对象属性,配置result标签下includeProperties属性时使用 对象名.*或则指定属性名的方式,不能光写对象属性名. 问题: ac ...