1. 程式人生 > 其它 >集合之Map【TreeMap】

集合之Map【TreeMap】

package com.Lucky.Map;

import java.util.Comparator;
import java.util.TreeMap;

/*
        TreeMap:底層結構和TreeSet一樣是紅黑樹
                可以排序/無重複/無索引

           注意點:排序方法也是和TreeSet一樣【自然排序/比較器排序】

 */
public class TreeMapDemo {
    public static void main(String[] args) {
        /**
         * 要求1:鍵儲存id,值儲存商品   按照id升序排列【預設的】和降序排列【利用比較器排序】
         */
        TreeMap<Integer,String> Tmap=new TreeMap<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });

        Tmap.put(1,"聯想拯救者");
        Tmap.put(5,"外星人");
        Tmap.put(9,"惠普");
        Tmap.put(4,"華為");

        System.out.println(Tmap);




        /**
         * 要求2:鍵儲存學生物件,值儲存種族   按照年齡排序/如果年齡一樣就比較姓名字母排序
         */
          TreeMap<Student,String> Smap=new TreeMap<>();

           Student str1=new Student("唯易",22);
           Student str2=new Student("珠峰",20);
           Student str3=new Student("信仰",22);
           Student str4=new Student("張老三",26);

            Smap.put(str1,"漢");
            Smap.put(str2,"少數名族");
            Smap.put(str3,"少數名族");
            Smap.put(str4,"漢");


        System.out.println(Smap);
    }
}

材料:

 1 package com.Lucky.Map;
 2 
 3 import java.util.Objects;
 4 
 5 public class Student implements Comparable<Student>{
 6     private String name;
 7     private int age;
 8 
 9     public Student() {
10     }
11 
12     public Student(String name, int age) {
13         this.name = name;
14 this.age = age; 15 } 16 17 public String getName() { 18 return name; 19 } 20 21 public void setName(String name) { 22 this.name = name; 23 } 24 25 public int getAge() { 26 return age; 27 } 28 29 public void setAge(int age) { 30 this
.age = age; 31 } 32 33 @Override 34 public boolean equals(Object o) { 35 if (this == o) return true; 36 if (o == null || getClass() != o.getClass()) return false; 37 Student student = (Student) o; 38 return age == student.age && Objects.equals(name, student.name); 39 } 40 41 @Override 42 public int hashCode() { 43 return Objects.hash(name, age); 44 } 45 46 @Override 47 public String toString() { 48 return "Student{" + 49 "name='" + name + '\'' + 50 ", age=" + age + 51 '}'; 52 } 53 54 @Override 55 public int compareTo(Student o) { 56 //比較年齡 57 int res=this.getAge()-o.getAge(); 58 if(res==0){ 59 //年齡相等,就比較姓名 60 res = this.getName().compareTo(o.getName()); 61 } 62 return res; 63 } 64 }
View Code

綜合小練習:

package com.Lucky.Map;
/*
     統計字串str="ACBBSABCBASSAABCCSAAACBCSAA";
     統計每一個字元出現的次數,按照從多到少排列

 */

import java.util.StringJoiner;
import java.util.TreeMap;
import java.util.function.BiConsumer;

/**
 *    統計個數:1.計數器思想  2.Map思想
 *     應用場景:HashMap用於不用排序的結果
 *             TreeMap用於要進行排序的結果
 */
public class TreeMapDemo1 {
    public static void main(String[] args) {
        String str="ACBBSABCBASSAABCCSAAACBCSAA";
        //建立TreeMap物件
        TreeMap<Character,Integer> tmap=new TreeMap<>();



        for (int i = 0; i < str.length(); i++) {
            char c=str.charAt(i);
             if(tmap.containsKey(c)){
                 //獲取次數
                 int sum=tmap.get(c);
                 sum++;
                 tmap.put(c,sum);
             }else {
                 tmap.put(c,1);
             }
        }


       //遍歷資料,格式  A(10)B(6)C(6)S(5)
        //方法1  StringBuilder
        StringBuilder builder=new StringBuilder();
        tmap.forEach(new BiConsumer<Character, Integer>() {
            @Override
            public void accept(Character character, Integer integer) {
                builder.append(character).append("(").append(integer).append(")");
            }
        });
        System.out.println(builder);

        //方法2  StringJoiner
        System.out.println("---------StringJoiner----------");
        StringJoiner joiner=new StringJoiner("","","");
        tmap.forEach((key,val)->{
            joiner.add(key+"").add("(").add(val+"").add(")");
        });
        System.out.println(joiner);

    }
}