TreeMap类

来源:互联网 发布:机构交易内部软件 编辑:程序博客网 时间:2024/06/01 09:57
 TreeMap也是基于红黑树(二叉树)数据结构实现的,特点:会对元素的键进行排序存储。
 
 TreeMap要注意的事项:
         1.往TreeMap添加元素的时候,如果元素的键具备自然顺序,那么就会按照键的自然顺序特性进行排序存储。
         2.往TreeMap添加元素的时候,如果元素的键不具备自然顺序,那么键所属的类必须要实现Comparable接口,把键的比较规则定义在CompareTo方法上。
         3.往TreeMap添加元素的时候,如果元素的键不具备自然顺序,而且键所属的类也没有实现Comparable接口,那么就必须在创建TreeMap对象的时候传入比较器。
  1. package com.cn.map;
  2. import java.util.Comparator;
  3. import java.util.TreeMap;
  4. /**
  5. * Author:Liu Zhiyong
  6. * Version:Version_1
  7. * Date:2016年7月19日09:21:12
  8. * Desc:TreeMap
  9. * TreeMap也是基于红黑树(二叉树)数据结构实现的,特点:会对元素的键进行排序存储。
  10. *
  11. * TreeMap要注意的事项:
  12. * 1.往TreeMap添加元素的时候,如果元素的键具备自然顺序,那么就会按照键的自然顺序特性进行排序存储。
  13. * 2.往TreeMap添加元素的时候,如果元素的键不具备自然顺序,那么键所属的类必须要实现Comparable接口,把键的比较规则定义在CompareTo方法上。
  14. * 3.往TreeMap添加元素的时候,如果元素的键不具备自然顺序,而且键所属的类也没有实现Comparable接口,那么就必须在创建TreeMap对象
  15. * 的时候传入比较器。
  16. */
  17. class Emp{// implements Comparable<Emp>{
  18. String name;
  19. int salary;
  20. public Emp(String name, int salary) {
  21. super();
  22. this.name = name;
  23. this.salary = salary;
  24. }
  25. @Override
  26. public String toString() {
  27. // TODO Auto-generated method stub
  28. return this.name + ":" + this.salary;
  29. }
  30. /*@Override
  31. public int compareTo(Emp o) {
  32. // TODO Auto-generated method stub
  33. return this.salary - o.salary;
  34. }*/
  35. }
  36. //自定义比较器
  37. class MyComparator implements Comparator<Emp>{
  38. @Override
  39. public int compare(Emp o1, Emp o2) {
  40. // TODO Auto-generated method stub
  41. return o1.salary - o2.salary;
  42. }
  43. }
  44. public class Demo4 {
  45. public static void main(String[] args) {
  46. /*TreeMap<Character, Integer> treeMap = new TreeMap<Character, Integer>();
  47. treeMap.put('e', 1);
  48. treeMap.put('a', 4);
  49. treeMap.put('b', 9);
  50. treeMap.put('c', 3);*/
  51. TreeMap<Emp, String> treeMap = new TreeMap<Emp, String>(new MyComparator());
  52. treeMap.put(new Emp("小龙女", 303), "001");
  53. treeMap.put(new Emp("习近平", 112), "004");
  54. treeMap.put(new Emp("奥巴马", 119), "005");
  55. treeMap.put(new Emp("朴槿惠", 222), "001");
  56. treeMap.put(new Emp("哈哈哈哈", 222), "009");
  57. System.out.println(treeMap);
  58. }
  59. }

需求:定义一个TreeMap,键存储的是书对象,值存储的是字符串。根据书的出版日期进行排序。  
  1. package com.cn.map;
  2. import java.text.ParseException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Comparator;
  5. import java.util.Date;
  6. import java.util.TreeMap;
  7. /**
  8. * Author:Liu Zhiyong
  9. * Version:Version_1
  10. * Date:2016年7月19日10:47:46
  11. * Desc:需求:定义一个TreeMap,键存储的是书对象,值存储的是字符串。根据书的出版日期进行排序。
  12. */
  13. class Book{
  14. String name;
  15. Date date;//出版日期
  16. public Book(String name, Date date) {
  17. this.name = name;
  18. this.date = date;
  19. }
  20. @Override
  21. public String toString() {
  22. // TODO Auto-generated method stub
  23. return "[" + this.name + ":" + this.date + "]";
  24. }
  25. }
  26. class MyComparator1 implements Comparator<Book>{
  27. @Override
  28. public int compare(Book o1, Book o2) {
  29. // TODO Auto-generated method stub
  30. return o1.date.compareTo(o2.date);//利用了Date的compareTo(Date anotherDate)方法进行排序
  31. //System.out.println((int)(o1.date.getTime() - o2.date.getTime())); //这样强转的话可能会出现精度丢失
  32. //System.out.println(new Long(o1.date.getTime() - o2.date.getTime()).intValue());
  33. //return (int)(o1.date.getTime() - o2.date.getTime());
  34. //return new Long(o1.date.getTime() - o2.date.getTime()).intValue();
  35. }
  36. }
  37. public class Demo5 {
  38. public static void main(String[] args) throws InterruptedException, ParseException {
  39. TreeMap<Book, String> treeMap = new TreeMap<Book, String>(new MyComparator1());//值存储书名
  40. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS");
  41. treeMap.put(new Book("简爱", simpleDateFormat.parse("2016-07-10 11:31:19")), "简爱");
  42. //Thread.sleep(1000);
  43. treeMap.put(new Book("十万个为什么", simpleDateFormat.parse("2014-7-20 11:13:18")), "十万个为什么");
  44. //Thread.sleep(1000);
  45. treeMap.put(new Book("The Thinking of Java", simpleDateFormat.parse("2016-6-12 11:9:22")), "The Thinking of Java");
  46. //Thread.sleep(1000);
  47. treeMap.put(new Book("完美的世界", simpleDateFormat.parse("2016-9-2 11:56:44")), "完美的世界");
  48. //Thread.sleep(1000);
  49. treeMap.put(new Book("斗破苍穹", simpleDateFormat.parse("2000-6-19 11:21:55")), "斗破苍穹");
  50. //Thread.sleep(1000);
  51. treeMap.put(new Book("校花的贴身高手", simpleDateFormat.parse("2015-2-9 11:15:00")), "校花的贴身高手");
  52. //Thread.sleep(1000);
  53. System.out.println(treeMap);
  54. }
  55. }
0 0
原创粉丝点击