java 顺序存储键值对_java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)...

import java.util.*;

public class Person implements Comparable//使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 void sop(T t) //使用泛型接收参数

{

System.out.println(t);

}

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

{

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

TreeMap map = new TreeMap(/*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> entryset = map.entrySet();

//获取迭代器

Iterator> it = entryset.iterator();

//用迭代器取数据

while(it.hasNext())

{

Map.Entry m = it.next();

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

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

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

}

}

}

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

{

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接口;要么在集合中传入自定义的比较器。

import java.util.*;public class Person implements Comparable//使Person的属性具有比较性

{privateString name;private intage;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()//获取姓名

{returnname;

}public int getAge()//获取年龄

{returnage;

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

{return name+","+age;

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

public inthashCode()

{return name.hashCode()+age*34;

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

publicboolean 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 classTest

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

{

System.out.println(t);

}public static voidmain(String args[]) throws Exception

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

TreeMap map = new TreeMap(/*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> entryset =map.entrySet();//获取迭代器

Iterator> it =entryset.iterator();//用迭代器取数据

while(it.hasNext())

{

Map.Entry m =it.next();

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

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

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

}

}

}class Mycompare implements comparator//自定义一个比较器

{public intcompare(Person p1,Person p2)

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

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值