TreeSet&第三方比較器&Map


TreeSet集合

特點:無序,但是可排序,不重復

  • CompareTo方法:對於String類的CompareTo方法,由對象的unicode碼-參數的unicode碼,並且按位比較。
  • 如果值大於0,證明對象要大於參數。
  • 如果值小於0,證明對象要小於參數。
  • 如果值等於0,證明對象等於參數

代碼演示:

 1 public class TreeSet 集合 {
 2 public static void main(String[] args) {
 3 /*TreeSet<String> s=new TreeSet<>();
 4 s.add("1");
 5 s.add("5");
 6 s.add("2");
 7 s.add("9");
 8 s.add("3");
 9 System.out.println(s);*/
10 TreeSet<Person> set=new TreeSet<>();
11 set.add(new Person("ls", 20));
12 set.add(new Person("zs", 19));
13 set.add(new Person("ml", 22));
14 set.add(new Person("ww", 21));
15 System.out.println(set);
16 // System.out.println("ab".compareTo("abcd"));
17 }
18 }
19 class Person implements Comparable<Person>{
20 String name;
21 int age;
22 @Override
23 public String toString() {
24 return "Person [name=" + name + ", age=" + age + "]";
25 }
26 public Person() {
27 super();
28 // TODO Auto-generated constructor stub
29 }
30 public Person(String name, int age) {
31 super();
32 this.name = name;
33 this.age = age;
34 }
35 // 假設排序規則: 按照年齡進行升序排序 -- 》要降序?將原有順序結果加負號或者將參數與對象對調位置。
36 @Override
37 public int compareTo(Person o) {
38 return -this.name.compareTo(o.name);
39 }
40 }

 

 第三方比較器:

代碼演示:

 1 public class  第三方比較器 {
 2 public static void main(String[] args) {
 3 /*TreeSet<Student> set=new TreeSet<>(new StudentComparator());
 4 set.add(new Student(19, "zs"));
 5 set.add(new Student(20, "ls"));
 6 set.add(new Student(21, "ww"));
 7 System.out.println(set);*/
 8 // 按姓名排序
 9 TreeSet<Student> set=new TreeSet<>(new Comparator<Student>() {
10 @Override
11 public int compare(Student o1, Student o2) {
12 // TODO Auto-generated method stub
13 return o1.name.compareTo(o2.name);
14 }
15 });
16 set.add(new Student(19, "zs"));
17 set.add(new Student(20, "ls"));
18 set.add(new Student(21, "ww"));
19 System.out.println(set);
20 }
21 }
22 // 第三方比較器的子類
23 class StudentComparator implements Comparator<Student>{
24 //o1 相當於 this o2 相當於 o
25 // 按照年齡比 升序
26 @Override
27 public int compare(Student o1, Student o2) {
28 // TODO Auto-generated method stub
29 return o1.age-o2.age;
30 }
31 }
32 class Student {
33 int age;
34 String name;
35 public Student() {
36 super();
37 // TODO Auto-generated constructor stub
38 }
39 public Student(int age, String name) {
40 super();
41 this.age = age;
42 this.name = name;
43 }
44 @Override
45 public String toString() {
46 return "Student [age=" + age + ", name=" + name + "]";
47 }
48 }

 

 

Map集合:

Map集合  稱為雙列集合,存儲的是一對值,稱為鍵值對,其中鍵用key,值用value表示

Map集合  鍵是不重復的,並且每個鍵最多映射一個值。

如果插入集合的鍵與原有的鍵重復,會覆蓋原有鍵的值。

3. 常用方法:
①.containsKey(Object key) /containsValue(Object value) 包含鍵 / 值
***②.get(key) 通過 key 獲取 value
***③.put(K key, V value) 添加,將 key 與 value 進行關聯
④.remove(Object key) 通過 key ,刪除。

 

Map集合的遍歷

①增強for

②迭代器

注意:要使用迭代器,就要將Map集合轉換為Set集合

① keySet() 將 Map 集合轉換為 Set 集合,其中將 Map 集合中的 key 轉換為 Set 集合。
② entrySet() 將 Map 集合轉換為 Set 集合,其中將 Map 集合中的 key 和 value 同時看做一個 Entry ,
一個 Entry 中同時包括 key 和 value 。
1>getKey 獲取鍵
2>getValue 獲取值

 

代碼演示:

 1 public class Map 集合的遍歷 {
 2 public static void main(String[] args) {
 3 HashMap<String, String> map=new HashMap<>();
 4 map.put("1", "");
 5 map.put("3", "");
 6 map.put("2", "");
 7 map.put("5", "");
 8 //① keySet
 9 /*Set<String> keySet = map.keySet();
10 //for/ 迭代器
11 Iterator<String> it = keySet.iterator();
12 while(it.hasNext()) {
13 String key = it.next();
14 // get(key)  通過 key 獲取值
15 System.out.println(key+"====>"+map.get(key));
16 }*/
17 //② entrySet
18 Set<Map.Entry<String, String>> set1=map.entrySet();
19 Iterator<Map.Entry<String, String>> it=set1.iterator();
20 while(it.hasNext()) {
21 Map.Entry<String, String> entry=it.next();
22 System.out.println(entry.getKey()+"===>"+entry.getValue());
23 }
24 }
25 }

 

 

 

集合應用之簡版斗地主:

 1 public class  簡版斗地主 {
 2 public static void main(String[] args) {
 3 String[] colors= {" 方塊 "," 梅花 "," 黑桃 "," 紅桃 "};
 4 String[] nums= {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
 5 // 洗牌: 將對應的花色與牌面拼接成字符串
 6 ArrayList<String> pokers=new ArrayList<>();
 7 for (String string : colors) {
 8 for (String st : nums) {
 9 pokers.add(string+st);
10 }
11 }
12 // 加入大小王
13 pokers.add(" 小王 ");
14 pokers.add(" 大王 ");
15 System.out.println(pokers);
16 System.out.println(pokers.size());
17 // 洗牌
18 Collections.shuffle(pokers);
19 System.out.println(pokers);
20 // 底牌
21 ArrayList<String> diPai=new ArrayList<>();
22 // 玩家 1
23 ArrayList<String> player1=new ArrayList<>();
24 // 玩家 2
25 ArrayList<String> player2=new ArrayList<>();
26 // 玩家 3
27 ArrayList<String> player3=new ArrayList<>();
28 // 底牌 3 張
29 diPai.add(pokers.remove(0));
30 diPai.add(pokers.remove(0));
31 diPai.add(pokers.remove(0));
32 System.out.println(diPai);
33 System.out.println(pokers);
34 while(true) {
35 if(pokers.isEmpty()) {
36 break;
37 }
38 player1.add(pokers.remove(0));
39 if(pokers.isEmpty()) {
40 break;
41 }
42 player2.add(pokers.remove(0));
43 if(pokers.isEmpty()) {
44 break;
45 }
46 player3.add(pokers.remove(0));
47 }
48 System.out.println("========================");
49 System.out.println(player1);
50 System.out.println(player2);
51 System.out.println(player3);
52 System.out.println(player3);
53 }
54 }

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com