集合之Map【TreeMap】
阿新 • • 發佈:2022-12-12
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;View Code14 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 }
綜合小練習:
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); } }