• 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的自学历程...只需坚持
  • 相关阅读:
    我的云之旅hadoop集群(3)
    动态域名绑定
    我的云之旅hadoop集群集成Hive(4)
    Axis2实践
    PHP Apache Mysql搭建
    JavaEE程序员必读图书大推
    我的云之旅hadoop集群集成Hbase集群(5)
    本博客总排名进入前100
    关系数据库及NoSql图书大推荐
    Last_IO_Errno: 1032
  • 原文地址:https://www.cnblogs.com/LZL-student/p/5907241.html
Copyright © 2020-2023  润新知