生活随笔
收集整理的這篇文章主要介紹了
Java基础day16
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Java基礎day16
- Java基礎day16-集合3
- 1.Map集合
- 1.1Map集合概述和特點
- 1.2Map集合的基本功能
- 1.3Map集合的獲取功能
- 1.4Map集合的遍歷(方式1)
- 1.5Map集合的遍歷(方式2)
- 1.6Map集合的案例
- 1.6.1HashMap集合練習之鍵是String值是Student
- 1.6.2HashMap集合練習之鍵是Student值是String
- 1.6.3集合嵌套之ArrayList嵌套HashMap
- 1.6.4集合嵌套之HashMap嵌套ArrayList
- 1.6.5統(tǒng)計字符串中每個字符出現(xiàn)的次數(shù)
- 2.Collections集合工具類
- 2.1Collections概述和使用
- 2.2ArrayList集合存儲學生并排序
- 3.斗地主案例
- 3.1模擬斗地主案例-普通版本【應用】
- 3.2模擬斗地主案例-升級版本
Java基礎day16-集合3
1.Map集合
1.1Map集合概述和特點
interface Map<K,V> K:鍵的類型;V:值的類型
- Map集合的特點
鍵值對映射關系
一個鍵對應一個值
鍵不能重復,值可以重復
元素存取無序 - Map集合的基本使用
import java
.util
.HashMap
;
import java
.util
.Map
;public class demo1 {public static void main(String
[] args
) {Map
<String, String> map
= new HashMap<String, String>();map
.put("001", "林青霞");map
.put("002", "張柏芝");map
.put("003", "王祖賢");System
.out
.println(map
);}
}
1.2Map集合的基本功能
方法名說明
| V put(K key,V value) | 添加元素 |
| V remove(Object key) | 根據(jù)鍵刪除鍵值對元素 |
| void clear() | 移除所有的鍵值對元素 |
| boolean containsKey(Object key) | 判斷集合是否包含指定的鍵 |
| boolean containsValue(Object value) | 判斷集合是否包含指定的值 |
| boolean isEmpty() | 判斷集合是否為空 |
| int size() | 集合的長度,也就是集合中鍵值對的個數(shù) |
import java
.util
.HashMap
;
import java
.util
.Map
;public class demo2 {public static void main(String
[] args
) {Map
<String,String> map
= new HashMap<String,String>();map
.put("001", "林青霞");map
.put("002", "張柏芝");map
.put("003", "王祖賢");
System
.out
.println(map
.size());System
.out
.println(map
);}
}
1.3Map集合的獲取功能
方法名說明
| V get(Object key) | 根據(jù)鍵獲取值 |
| Set keySet() | 獲取所有鍵的集合 |
| Collection values() | 獲取所有值的集合 |
| Set<Map.Entry<K,V>> entrySet() | 獲取所有鍵值對對象的集合 |
import java
.util
.Collection
;
import java
.util
.HashMap
;
import java
.util
.Map
;
import java
.util
.Set
;public class demo3 {public static void main(String
[] args
) {Map
<String, String> map
= new HashMap<String, String>();map
.put("001", "林青霞");map
.put("002", "張柏芝");map
.put("003", "王祖賢");System
.out
.println(map
.get("001"));Set
<String> keySet
= map
.keySet();for (String key
: keySet
) {System
.out
.println(key
);}Collection
<String> values
= map
.values();for (String value
: values
) {System
.out
.println(value
);}}
}
1.4Map集合的遍歷(方式1)
- 遍歷思路
我們剛才存儲的元素都是成對出現(xiàn)的,所以我們把Map看成是一個夫妻對的集合把所有的丈夫給集中起來遍歷丈夫的集合,獲取到每一個丈夫根據(jù)丈夫去找對應的妻子
- 步驟分析獲取所有鍵的集合。用keySet()方法實現(xiàn)遍歷鍵的集合,獲取到每一個鍵。用增強for實現(xiàn)根據(jù)鍵去找值。用get(Object key)方法實現(xiàn)
import java
.util
.HashMap
;
import java
.util
.Map
;
import java
.util
.Set
;public class demo4 {public static void main(String
[] args
) {Map
<String, String> map
= new HashMap<String, String>();map
.put("張無忌", "趙敏");map
.put("郭靖", "黃蓉");map
.put("楊過", "小龍女");Set
<String> keySet
= map
.keySet();for (String key
: keySet
) {String value
= map
.get(key
);System
.out
.println(key
+ "," + value
);}}
}
1.5Map集合的遍歷(方式2)
- 遍歷思路我們剛才存儲的元素都是成對出現(xiàn)的,所以我們把Map看成是一個夫妻對的集合獲取所有結婚證的集合遍歷結婚證的集合,得到每一個結婚證根據(jù)結婚證獲取丈夫和妻子
- 步驟分析獲取所有鍵值對對象的集合Set<Map.Entry<K,V>> entrySet():獲取所有鍵值對對象的集合遍歷鍵值對對象的集合,得到每一個鍵值對對象用增強for實現(xiàn),得到每一個Map.Entry根據(jù)鍵值對對象獲取鍵和值用getKey()得到鍵用getValue()得到值
import java
.util
.HashMap
;
import java
.util
.Map
;
import java
.util
.Set
;public class demo5 {public static void main(String
[] args
) {Map
<String, String> map
= new HashMap<String, String>();map
.put("張無忌", "趙敏");map
.put("郭靖", "黃蓉");map
.put("楊過", "小龍女");Set
<Map
.Entry
<String, String>> entryset
= map
.entrySet();for (Map
.Entry
<String, String> me
: entryset
) {String key
= me
.getKey();String value
= me
.getValue();System
.out
.println(key
+ "," + value
);}}
}
1.6Map集合的案例
1.6.1HashMap集合練習之鍵是String值是Student
- 案例需求
創(chuàng)建一個HashMap集合,鍵是學號(String),值是學生對象(Student)。存儲三個鍵值對元素,并遍歷 - 代碼實現(xiàn)
import java
.util
.HashMap
;
import java
.util
.Map
;
import java
.util
.Set
;
public class demo1 {public static void main(String
[] args
) {Map
<String, Student> map
= new HashMap<String, Student>();Student s1
= new Student("林青霞", 30);Student s2
= new Student("張曼玉", 35);Student s3
= new Student("王祖賢", 33);map
.put("001", s1
);map
.put("002", s2
);map
.put("003", s3
);Set
<String> keySet
= map
.keySet();for (String key
: keySet
) {Student value
= map
.get(key
);System
.out
.println(key
+ "," + value
.getName() + "," + value
.getAge());}System
.out
.println("------");Set
<Map
.Entry
<String, Student>> entrySet
= map
.entrySet();for (Map
.Entry
<String, Student> me
: entrySet
) {String key
= me
.getKey();Student value
= me
.getValue();System
.out
.println(key
+ "," + value
.getName() + "," + value
.getAge());}}
}
1.6.2HashMap集合練習之鍵是Student值是String
- 案例需求
創(chuàng)建一個HashMap集合,鍵是學生對象(Student),值是居住地 (String)。存儲多個元素,并遍歷。
要求保證鍵的唯一性:如果學生對象的成員變量值相同,我們就認為是同一個對象 - 代碼實現(xiàn)
public class Student {private String name
;private int age
;public Student() {}public Student(String name
, int age
) {this.name
= name
;this.age
= age
;}public String
getName() {return name
;}public void setName(String name
) {this.name
= name
;}public int getAge() {return age
;}public void setAge(int age
) {this.age
= age
;}@Overridepublic boolean equals(Object o
) {if (this == o
) return true;if (o
== null
|| getClass() != o
.getClass()) return false;Student student
= (Student
) o
;if (age
!= student
.age
) return false;return name
!= null
? name
.equals(student
.name
) : student
.name
== null
;}@Overridepublic int hashCode() {int result
= name
!= null
? name
.hashCode() : 0;result
= 31 * result
+ age
;return result
;}
}
import java
.util
.HashMap
;
import java
.util
.Set
;public class demo {public static void main(String
[] args
) {HashMap
<Student, String> map
= new HashMap<Student, String>();Student s1
= new Student("林青霞", 30);Student s2
= new Student("張曼玉", 35);Student s3
= new Student("王祖賢", 33);Student s4
= new Student("王祖賢", 33);map
.put(s1
, "深圳");map
.put(s2
, "北京");map
.put(s3
, "上海");map
.put(s4
, "廣州");Set
<Student> keySet
= map
.keySet();for (Student key
: keySet
) {String value
= map
.get(key
);System
.out
.println(key
.getName() + "," + key
.getAge() + "," + value
);}}
}
1.6.3集合嵌套之ArrayList嵌套HashMap
- 案例需求
創(chuàng)建一個ArrayList集合,存儲三個元素,每一個元素都是HashMap
每一個HashMap的鍵和值都是String,并遍歷。 - 代碼實現(xiàn)
import java
.util
.ArrayList
;
import java
.util
.HashMap
;
import java
.util
.Set
;public class demo2 {public static void main(String
[] args
) {ArrayList
<HashMap
<String, String>> array
= new ArrayList<HashMap
<String, String>>();HashMap
<String, String> hm1
= new HashMap<>();hm1
.put("孫策", "大喬");hm1
.put("周瑜", "小喬");array
.add(hm1
);HashMap
<String, String> hm2
= new HashMap<>();hm2
.put("郭靖", "黃蓉");hm2
.put("楊過", "小龍女");array
.add(hm2
);HashMap
<String, String> hm3
= new HashMap<>();hm3
.put("令狐沖", "任盈盈");hm3
.put("林平之", "岳靈珊");array
.add(hm3
);for (HashMap
<String, String> hm
: array
) {Set
<String> keySet
= hm
.keySet();for (String key
: keySet
) {String value
= hm
.get(key
);System
.out
.println(key
+ "," + value
);}}}
}
1.6.4集合嵌套之HashMap嵌套ArrayList
- 案例需求
創(chuàng)建一個HashMap集合,存儲三個鍵值對元素,每一個鍵值對元素的鍵是String,值是ArrayList
每一個ArrayList的元素是String,并遍歷。 - 代碼實現(xiàn)
import java
.util
.ArrayList
;
import java
.util
.HashMap
;
import java
.util
.Set
;public class demo3 {public static void main(String
[] args
) {HashMap
<String
, ArrayList
<String>> hm
= new HashMap<String
, ArrayList
<String>>();ArrayList
<String> sgyy
= new ArrayList<>();sgyy
.add("諸葛亮");sgyy
.add("趙云");hm
.put("三國演義", sgyy
);ArrayList
<String> xyj
= new ArrayList<>();xyj
.add("唐僧");xyj
.add("孫悟空");hm
.put("西游記", xyj
);ArrayList
<String> shz
= new ArrayList<>();shz
.add("武松");shz
.add("魯智深");hm
.put("水滸傳", shz
);Set
<String> keySet
= hm
.keySet();for (String key
: keySet
) {System
.out
.println(key
);ArrayList
<String> array
= hm
.get(key
);for (String s
: array
) {System
.out
.println("\t"+s
);}}}
}
1.6.5統(tǒng)計字符串中每個字符出現(xiàn)的次數(shù)
- 案例需求
鍵盤錄入一個字符串,要求統(tǒng)計字符串中每個字符串出現(xiàn)的次數(shù)。
舉例:鍵盤錄入“aababcabcdabcde” 在控制臺輸出:“a(5)b(4)c(3)d(2)e(1)” - 代碼實現(xiàn)
import java
.util
.HashMap
;
import java
.util
.Scanner
;
import java
.util
.Set
;public class demo4 {public static void main(String
[] args
) {Scanner sc
= new Scanner(System
.in
);System
.out
.println("請輸入一個字符串:");String line
= sc
.nextLine();HashMap
<Character, Integer> hm
= new HashMap<Character, Integer>();for (int i
= 0; i
< line
.length(); i
++) {char key
= line
.charAt(i
);Integer value
= hm
.get(key
);if (value
== null
) {hm
.put(key
, 1);} else {value
++;hm
.put(key
, value
);}}StringBuilder sb
= new StringBuilder();Set
<Character> keySet
= hm
.keySet();for (Character key
: keySet
){Integer value
= hm
.get(key
);sb
.append(key
).append("(").append(value
).append(")");}String result
= sb
.toString();System
.out
.println(result
);}
}
2.Collections集合工具類
2.1Collections概述和使用
- Collections類的作用
是針對集合操作的工具類 - Collections類常用方法
方法名說明
| public static void sort(List list) | 將指定的列表按升序排序 |
| public static void reverse(List<?> list) | 反轉指定列表中元素的順序 |
| public static void shuffle(List<?> list) | 使用默認的隨機源隨機排列指定的列表 |
import java
.util
.ArrayList
;
import java
.util
.Collections
;
import java
.util
.List
;public class demo5 {public static void main(String
[] args
) {List
<Integer> list
= new ArrayList<Integer>();list
.add(30);list
.add(20);list
.add(10);list
.add(40);list
.add(50);Collections
.sort(list
);Collections
.reverse(list
);Collections
.shuffle(list
);System
.out
.println(list
);}
}
2.2ArrayList集合存儲學生并排序
- 案例需求
ArrayList存儲學生對象,使用Collections對ArrayList進行排序
要求:按照年齡從小到大排序,年齡相同時,按照姓名的字母順序排序 - 代碼實現(xiàn)
import java
.util
.ArrayList
;
import java
.util
.Collections
;
import java
.util
.Comparator
;public class demo {public static void main(String
[] args
) {ArrayList
<Student> array
= new ArrayList<Student>();Student s1
= new Student("linqingxia", 30);Student s2
= new Student("zhangmanyu", 35);Student s3
= new Student("wangzuxian", 33);Student s4
= new Student("liuyan", 33);array
.add(s1
);array
.add(s2
);array
.add(s3
);array
.add(s4
);Collections
.sort(array
, new Comparator<Student>() {@Overridepublic int compare(Student s1
, Student s2
) {int num
= s1
.getAge() - s2
.getAge();int num2
= num
== 0 ? s1
.getName().compareTo(s2
.getName()) : num
;return num2
;}});for (Student s
: array
) {System
.out
.println(s
.getName() + "," + s
.getAge());}}
}
3.斗地主案例
3.1模擬斗地主案例-普通版本【應用】
- 案例需求
通過程序實現(xiàn)斗地主過程中的洗牌,發(fā)牌和看牌 - 代碼實現(xiàn)
import java
.util
.ArrayList
;
import java
.util
.Collections
;public class demo2 {public static void main(String
[] args
) {ArrayList
<String> poker
= new ArrayList<String>();String
[] colors
= {"?", "?", "?", "?"};String
[] numbers
= {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};for (String color
: colors
) {for (String number
: numbers
) {poker
.add(color
+ number
);}}poker
.add("大王");poker
.add("小王");Collections
.shuffle(poker
);ArrayList
<String> p1
= new ArrayList<String>();ArrayList
<String> p2
= new ArrayList<String>();ArrayList
<String> p3
= new ArrayList<String>();ArrayList
<String> p4
= new ArrayList<String>();for (int i
= 0; i
< poker
.size(); i
++) {if (i
>= poker
.size() - 3) {p4
.add(poker
.get(i
));} else if (i
% 3 == 0) {p1
.add(poker
.get(i
));} else if (i
% 3 == 1) {p2
.add(poker
.get(i
));} else if (i
% 3 == 2) {p3
.add(poker
.get(i
));}}lookpoker("001", p1
);lookpoker("002", p2
);lookpoker("003", p3
);lookpoker("004", p4
);}public static void lookpoker(String name
, ArrayList
<String> array
) {System
.out
.print(name
+ ":");for (String s
: array
) {System
.out
.print(s
);}System
.out
.println();}
}
3.2模擬斗地主案例-升級版本
- 案例需求
通過程序實現(xiàn)斗地主過程中的洗牌,發(fā)牌和看牌。要求:對牌進行排序 - 代碼實現(xiàn)
import java
.util
.ArrayList
;
import java
.util
.Collections
;
import java
.util
.HashMap
;
import java
.util
.TreeSet
;public class demo6 {public static void main(String
[] args
) {HashMap
<Integer, String> hm
= new HashMap<Integer, String>();ArrayList
<Integer> array
= new ArrayList<Integer>();String
[] colors
= {"?", "?", "?", "?"};String
[] numbers
= {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};int index
= 0;for (String number
: numbers
) {for (String color
: colors
) {hm
.put(index
, number
+ color
);array
.add(index
);index
++;}}hm
.put(index
, "小王");array
.add(index
);index
++;hm
.put(index
, "大王");array
.add(index
);Collections
.shuffle(array
);TreeSet
<Integer> p1
= new TreeSet<Integer>();TreeSet
<Integer> p2
= new TreeSet<Integer>();TreeSet
<Integer> p3
= new TreeSet<Integer>();TreeSet
<Integer> p4
= new TreeSet<Integer>();for (int i
= 0; i
< array
.size(); i
++) {if (i
>= array
.size() - 3) {p4
.add(array
.get(i
));} else if (i
% 3 == 0) {p1
.add(array
.get(i
));} else if (i
% 3 == 1) {p2
.add(array
.get(i
));} else if (i
% 3 == 2) {p3
.add(array
.get(i
));}}lookpoker("001", p1
, hm
);lookpoker("002", p2
, hm
);lookpoker("003", p3
, hm
);lookpoker("004", p4
, hm
);}public static void lookpoker(String name
, TreeSet
<Integer> ts
, HashMap
<Integer, String> hm
) {System
.out
.print(name
+ ":");for (Integer key
: ts
) {String poker
= hm
.get(key
);System
.out
.print(poker
+ " ");}System
.out
.println();}
}
總結
以上是生活随笔為你收集整理的Java基础day16的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。