java 18 - 5 TreeMap的举例


TreeMap:是基于红黑树的Map接口的实现。

    TreeMap<String/Integer,String>:迭代顺序会按照自然顺序

    TreeMap<Person,String>:迭代顺序要自己定义
        键:Person
        值:String

package map_son;

 2 
 3 import java.util.Comparator;
 4 import java.util.Set;
 5 import java.util.TreeMap;
 6 
 7 public class TreeMapDemo {
 8 
 9     public static void main(String[] args) {
10         // 创建集合对象
11         // 注意,这里要用的是自定义迭代,而且使用匿名内部类
12         TreeMap<Person, String> t1 = new TreeMap<Person, String>(
13                 new Comparator<Person>() {
14                     // 按照年龄大小排列
15                     //Cannot reduce the visibility of the inherited method from Comparator<Person>
16                     //出现这个错误的时候,应该把系统自己生成的下面的private改为public
17                     public int compare(Person p1, Person p2) {
18                         int num1 = p1.getAge() - p2.getAge();
19                         // 若年龄一样,则看名字是否一样
20                         int num2 = num1 == 0 ? p1.getName().compareTo(
21                                 p2.getName()) : num1;
22                         return num2;
23 
24                     }
25                 });
26 
27         // 创建Person对象
28         Person p1 = new Person("潘安", 30);
29         Person p2 = new Person("柳下惠", 35);
30         Person p3 = new Person("唐伯虎", 33);
31         Person p4 = new Person("燕青", 32);
32         Person p5 = new Person("唐伯虎", 33);
33 
34         // 添加到集合中 朝代乱写的
35         t1.put(p1, "宋朝");
36         t1.put(p2, "元朝");
37         t1.put(p3, "明朝");
38         t1.put(p4, "清朝");
39         t1.put(p5, "民国");
40         t1.put(p1, "唐朝");// 两个的键都是p1
41 
42         // 进行遍历
43         // 创建键集合
44         Set<Person> sp = t1.keySet();
45         // 遍历键集合
46         for (Person key : sp) {
47             // 获取对应的值
48             String value = t1.get(key);
49             // 输出
50             System.out.println(key.getName() + "\t" + key.getAge() + "\t"
51                     + value);
52         }
53         /*        宋朝的被唐朝的所替换掉。键一样,后来的替换前面的,Map的特性之一
54          潘安    30    唐朝
55         燕青    32    清朝
56         唐伯虎    33    民国
57         柳下惠    35    元朝
58          */
59 
60     }
61 }

 


  需求:
    "aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)
  分析:
    A:定义一个字符串对象(键盘录入元素)
    B:定义一个集合:
  键:Character
  值:Integer
    C:把字符串转换为字符数组
    D: 遍历字符串数组,把里面的元素作为键放入集合中:
  但是,条件是这些:(把键作为元素放进去,如果该键已经存在,则返回null,否则不是null)
      a:返回的是null:则把该元素作为键添加进去,同时对应的值为1
      b:返回的不是null:则把该元素对应的值+1,重新加载键和值
    E:定义一个字符串缓冲区
    F:遍历集合,把集合中的键和值按照想要的格式进行拼接,拼接到字符串缓冲区中
    G:转换为String类,并输出

 1 package map_son;
 2 
 3 import java.util.Scanner;
 4 import java.util.Set;
 5 import java.util.TreeMap;
 6 
 7 public class TreeMapDemo2 {
 8 
 9     public static void main(String[] args) {
10         // 定义键盘录入
11         Scanner sc = new Scanner(System.in);
12         System.out.println("请输入一段字符串:");
13         String line = sc.nextLine();
14 
15         // 定义一个集合:键:Character 值:Integer
16         TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
17 
18         // 把字符串转为字符数组
19         char[] c = line.toCharArray();
20 
21         // 遍历字符串数组,把里面的元素作为键放入集合中:
22         // 这一段代码中,运用了几次Integer和Character的自动拆箱和自动装箱
23         for (char ch : c) {
24             // 首先得定义一个值,看返回值
25             Integer result = tm.get(ch);
26 
27             // a:返回的是null:则把该元素作为键添加进去,同时对应的值为1
28             if (result == null) {
29                 tm.put(ch, 1);
30             } else {
31                 result++;
32                 tm.put(ch, result);
33             }
34 
35         }
36 
37         // 定义一个字符串缓冲区
38         StringBuilder sb = new StringBuilder();
39 
40         // 遍历集合,把集合中的键和值按照想要的格式进行拼接,拼接到字符串缓冲区中
41         // 获取键的集合
42         Set<Character> s = tm.keySet();
43         for (Character key : s) {
44 
45             // 获取对应的值
46             Integer i = tm.get(key);
47 
48             // 把集合中的键和值按照想要的格式进行拼接,拼接到字符串缓冲区中 a(5)b(4)c(3)d(2)e(1)
49             sb.append(key).append("(").append(i).append(")");
50         }
51 
52         // 字符串缓冲区转换为String类,并输出
53         String count = sb.toString();
54         System.out.println("统计结果是:" + count);
55     }
56 
57 }

 

 1 package map_son;
 2 /*
 3      Person自定义类
 4  */
 5 public class Person {
 6         
 7         private    String name;
 8         private int age;
 9         
10         
11         public Person() {
12             super();
13             // TODO Auto-generated constructor stub
14         }
15 
16 
17         public Person(String name, int age) {
18             super();
19             this.name = name;
20             this.age = age;
21         }
22 
23 
24         public String getName() {
25             return name;
26         }
27 
28 
29         public void setName(String name) {
30             this.name = name;
31         }
32 
33 
34         public int getAge() {
35             return age;
36         }
37 
38 
39         public void setAge(int age) {
40             this.age = age;
41         }
42 }

 

posted @ 2016-09-25 22:23  卡拉瓦  阅读(326)  评论(0编辑  收藏  举报