zoukankan      html  css  js  c++  java
  • java 18

    
    

    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() + "	" + key.getAge() + "	"
    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 }
    何事都只需坚持.. 难? 维熟尔。 LZL的自学历程...只需坚持
  • 相关阅读:
    2021,6,10 xjzx 模拟考试
    平衡树(二)——Treap
    AtCoder Beginner Contest 204 A-E简要题解
    POJ 2311 Cutting Game 题解
    Codeforces 990G GCD Counting 题解
    NOI2021 SDPTT D2T1 我已经完全理解了 DFS 序线段树 题解
    第三届山东省青少年创意编程与智能设计大赛总结
    Luogu P6042 「ACOI2020」学园祭 题解
    联合省选2021 游记
    Codeforces 1498E Two Houses 题解 —— 如何用结论吊打标算
  • 原文地址:https://www.cnblogs.com/LZL-student/p/5907241.html
Copyright © 2011-2022 走看看