博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中Set转List 和 TreeMap中实现自定义类作为key值
阅读量:4048 次
发布时间:2019-05-25

本文共 2669 字,大约阅读时间需要 8 分钟。

Map转Set & Set转List

//构造Map数据    	Map
map = new HashMap
(); map.put("ele1", "小樱"); map.put("ele2", "若曦"); map.put("ele3", "晴川"); Set
set = map.keySet(); //Set转List,方法一 : ArrayList(Collection
c) List
list1 = new ArrayList
(set); for(int i = 0; i < list1.size(); i++){ System.out.println("list1(" + i + ") --> " + list1.get(i)); } //Set转List,方法二:List实现类(ArrayList/LinkedList)的方法 -- addAll(Collection
c) List
list2 = new ArrayList
(); list2.addAll(set); for(String elem : list2){ System.out.println(elem); }

在TreeMap中,如果key值是java中的基本类型,TreeMap会自身帮我们排序,如果是自定义类型,如定义一个Student类作为key值,我们如果不告知排序规则的话,运行就会报错。所以,如何实现自定义排序呢?解决方案有2个,二者选一即可:

  • 在Student类中实现Comparable,重写compareTo方法
  • 在构造函数中new Comparator,匿名内部类,重写compare 方法

代码如下:

public class Student implements Comparable
{ private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(Student o) { int num1 = this.getAge()-o.getAge(); int num2 = num1==0?this.getName().compareTo(o.getName()):num1; return num2; }public class TestTreeMap { public static void main(String[] args) { //1.创建集合 TreeMap
map = new TreeMap
(new Comparator
() { //按照年龄来排序,年龄相同按照姓名来排序 @Override public int compare(Student o1, Student o2) { if(o1.getAge()==o2.getAge()){ return o1.getName().compareTo(o2.getName()); } return o1.getAge()-o2.getAge(); } //2.创建学生对象并往集合中增加 Student s1 = new Student("张三",27); Student s2 = new Student("李四",29); Student s3 = new Student("王五",16); Student s4 = new Student("张三",27); map.put(s1, "2001"); map.put(s2, "2002"); map.put(s3, "2003"); map.put(s4, "2004"); //3.遍历集合 ,排序完成 Set
set = map.keySet(); for(Student student : set){ String value = map.get(student); System.out.println(student.getName()+"=="+student.getAge()+"=="+value); } }}

转载地址:http://yvfci.baihongyu.com/

你可能感兴趣的文章
计算机网络复习要点
查看>>
Variable property attributes or Modifiers in iOS
查看>>
NSNotificationCenter 用法总结
查看>>
C primer plus 基础总结(一)
查看>>
剑指offer算法题分析与整理(三)
查看>>
Ubuntu 13.10使用fcitx输入法
查看>>
pidgin-lwqq 安装
查看>>
mint/ubuntu安装搜狗输入法
查看>>
C++动态申请数组和参数传递问题
查看>>
opencv学习——在MFC中读取和显示图像
查看>>
C/C++中关于动态生成一维数组和二维数组的学习
查看>>
JVM最简生存指南
查看>>
Java的对象驻留
查看>>
JVM并发机制探讨—内存模型、内存可见性和指令重排序
查看>>
持续可用与CAP理论 – 一个系统开发者的观点
查看>>
nginx+tomcat+memcached (msm)实现 session同步复制
查看>>
c++字符数组和字符指针区别以及str***函数
查看>>
c++类的操作符重载注意事项
查看>>
c++模板与泛型编程
查看>>
WAV文件解析
查看>>