1. Map集合的概述和特点
- 将键映射到值的对象
- 一个映射不能包含重复的键
- 每个键最多只能映射到一个值
2. Map和Collection的区别 ?
- A. Map 存储的是键值对形式的元素,键唯一,值可以重复。夫妻对
- B. Collection 存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。光棍
3. Map集合的遍历之键找值
-
思路 :
A. 获取所有的键 B. 遍历键的集合,获取得到每一个键 C. 根据键区找值
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo3 {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("杨过", "小龙女");
map.put("郭靖", "黄蓉");
map.put("徐康健", "柳波");
map.put("XKJ", "沙雳");
Set<String> set = map.keySet();
// for (Object object : set) {
String key = (String) object;
map.get(key);
System.out.println(key + "---" + map.get(key));
// }
//
for (String key : set) {
String value = map.get(key);
System.out.println(key + "---" + value);
}
}
}
4. Map集合的遍历之键值对对象找键和值
-
思路 :
A. 获取所有键值对对象的集合 B. 遍历键值对对象的集合,得到每一个键值对对象 C. 根据键值对对象获取键和值
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class MapDemo4 {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("杨过", "小龙女");
map.put("郭靖", "黄蓉");
map.put("徐康健", "柳波");
map.put("XKJ", "沙雳");
Set<Entry<String, String>> set = map.entrySet();
for (Entry<String, String> me : set) {
String key = me.getKey();
String value = me.getValue();
System.out.println(key + "---" + value);
}
}
}
5. Map集合遍历的两种方式比较图解
6. HashMap集合键是Stirng值是String的案例(HashMap<String,String>)
- 哈希表的作用是来保证键的唯一性的。
import java.util.HashMap;
import java.util.Set;
public class HashMapDemo {
public static void main(String[] args) {
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("AK002", "马云");
hm.put("AK001", "马化腾");
hm.put("AK005", "乔布斯");
hm.put("AK003", "刘在石");
hm.put("AK002", "朴明秀");
Set<String> set = hm.keySet();
for (String key : set) {
String value = hm.get(key);
System.out.println(key + "---" + value);
}
}
}
7. HashMap集合键是Integer值是String的案例(HashMap<Integer,String>)
import java.util.HashMap;
import java.util.Set;
public class HashMapDemo2 {
public static void main(String[] args) {
HashMap<Integer, String> hm = new HashMap<Integer, String>();
hm.put(68, "科比");
hm.put(26, "杨腾宇");
hm.put(30, "徐康健德子");
hm.put(24, "姚中仁");
Set<Integer> set = hm.keySet();
for (Integer key : set) {
String value = hm.get(key);
System.out.println(value + "---" + key);
}
System.out.println(hm);
}
}
8. HashMap集合键是String值是Student的案例(HashMap<String,Student>)
import java.util.HashMap;
import java.util.Set;
public class HashMapDemo3 {
public static void main(String[] args) {
HashMap<String, Student> hm = new HashMap<String, Student>();
Student s1 = new Student("周星驰", 58);
Student s2 = new Student("柳大华", 55);
Student s3 = new Student("梁朝伟", 59);
Student s4 = new Student("刘嘉玲", 53);
hm.put("9527", s1);
hm.put("9522", s3);
hm.put("9524", s2);
hm.put("9529", s4);
Set<String> set = hm.keySet();
for (String key : set) {
Student student = hm.get(key);
System.out.println(student.getAge() + "---" + key + "---" + student.getName());
}
}
}
9. HashMap集合键是Student值是String的案例(HashMap<Student,String>)
- Hash(哈希)结构都依赖hashCode()和equals()方法
import java.util.HashMap;
import java.util.Set;
public class HashMapDemo4 {
public static void main(String[] args) {
Map<Student, String> hm = new HashMap<Student, String>();
Student s1 = new Student("杨腾宇", 26);
Student s2 = new Student("王昭君", 28);
Student s3 = new Student("西施", 16);
Student s4 = new Student("貂蝉", 06);
Student s5 = new Student("西施", 16); // 重写hashCode()和equals()方法
hm.put(s1, "6666");
hm.put(s2, "9999");
hm.put(s3, "1111");
hm.put(s4, "3333");
hm.put(s5, "8888");
Set<Student> set = hm.keySet();
for (Student key : set) {
String value = hm.get(key);
System.out.println(key.getName() + "---" + key.getAge() + "---" + value);
}
}
}
10. LinkedHashMap的概述和使用
- LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。
- 由哈希表保证键的唯一性
- 由链表保证键盘的有序(存储和取出的顺序一致)
import java.util.LinkedHashMap;
import java.util.Set;
public class LinkedHashMapDemo {
public static void main(String[] args) {
LinkedHashMap<String, String> lkm = new LinkedHashMap<String, String>();
lkm.put("2345", "hello");
lkm.put("1234", "world");
lkm.put("5678", "java");
lkm.put("2345", "javaee");
lkm.put("5678", "mybatis");
Set<String> set = lkm.keySet();
for (String key : set) {
String value = lkm.get(key);
System.out.println(key + "---" + value);
}
}
}
11. TreeMap集合的概述和特点
- 基于红黑树的Map接口的实现。
import java.util.Set;
import java.util.TreeMap;
public class TreeMapDemo {
public static void main(String[] args) {
TreeMap<String, String> tm = new TreeMap<String, String>();
tm.put("hello", "你好");
tm.put("world", "世界");
tm.put("Java", "爪哇国");
tm.put("world", "新世界");
tm.put("JavaEE", "EE爪哇国");
Set<String> set = tm.keySet();
for (String key : set) {
String value = tm.get(key);
System.out.println(key + "---" + value);
}
}
}
12. 统计字符串中每个字符出现的次数案例代码实现
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
public class TreeMapDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String line = sc.nextLine();
TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
char[] chs = line.toCharArray();
for (char ch : chs) {
Integer i = tm.get(ch);
if (i == null) {
tm.put(ch, 1);
} else {
i++;
tm.put(ch, i);
}
}
StringBuffer sb = new StringBuffer();
Set<Character> set = tm.keySet();
for (Character key : set) {
Integer value = tm.get(key);
sb.append(key).append("(").append(value).append(")");
}
String result = sb.toString();
System.out.println(result);
}
}
13. HashMap集合嵌套HashMap集合的案例
import java.util.HashMap;
import java.util.Set;
public class HashMapDemo2 {
public static void main(String[] args) {
// 大集合
HashMap<String, HashMap<String, Integer>> czbkMap = new HashMap<String, HashMap<String, Integer>>();
// 基础班集合对象
HashMap<String, Integer> jcMap = new HashMap<String, Integer>();
jcMap.put("徐康健", 27);
jcMap.put("高晗", 27);
czbkMap.put("基础班", jcMap);
// 就业班集合对象
HashMap<String, Integer> jyMap = new HashMap<String, Integer>();
jyMap.put("杨腾宇", 26);
jyMap.put("YTY", 66);
czbkMap.put("就业班", jyMap);
Set<String> czbkMapSet = czbkMap.keySet();
for (String czbkMapKey : czbkMapSet) {
System.out.println(czbkMapKey);
HashMap<String, Integer> czbkMapValue = czbkMap.get(czbkMapKey);
Set<String> czbkMapValueSet = czbkMapValue.keySet();
for (String czbkMapValueKey : czbkMapValueSet) {
Integer czbkMapValueValue = czbkMapValue.get(czbkMapValueKey);
System.out.println("\t" + czbkMapValueKey + "---" + czbkMapValueValue);
}
}
}
}
14. HashMap集合嵌套ArrayList集合的案例
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
public class ArrayListInHashMap {
public static void main(String[] args) {
HashMap<String , ArrayList<String>> hm = new HashMap<String , ArrayList<String>>();
ArrayList<String> array1 = new ArrayList<String>();
array1.add("吕布");
array1.add("周瑜");
hm.put("三国演义", array1);
ArrayList<String> array2 = new ArrayList<String>();
array2.add("令狐冲");
array2.add("任我行");
hm.put("笑傲江湖", array2);
ArrayList<String> array3 = new ArrayList<String>();
array3.add("大力金刚经");
array3.add("一阳指");
hm.put("天龙八部", array3);
Set<String> set = hm.keySet();
for (String key : set) {
System.out.println(key);
ArrayList<String> value = hm.get(key);
for (String string : value) {
System.out.println("\t" + string);
}
}
}
}
15. ArrayList集合嵌套HashMap集合的案例
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class HashMapInArrayList {
public static void main(String[] args) {
ArrayList<Map<Integer, String>> arrayList = new ArrayList<Map<Integer, String>>();
Map<Integer, String> map1 = new HashMap<Integer, String>();
map1.put(66, "WAF");
map1.put(24, "科比ni很帅");
Map<Integer, String> map2 = new HashMap<Integer, String>();
map2.put(68, "热狗");
map2.put(29, "脆骨肠");
Map<Integer, String> map3 = new HashMap<Integer, String>();
map3.put(666666, "机器学习");
map3.put(16, "烤肠机");
arrayList.add(map1);
arrayList.add(map2);
arrayList.add(map3);
for (Map<Integer, String> map : arrayList) {
Set<Integer> set = map.keySet();
for (Integer key : set) {
System.out.println(key + "---" + map.get(key));
}
}
}
}
16. 集合的多层嵌套
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
public class HashMapDemo {
public static void main(String[] args) {
// 创建大大卷集合
HashMap<String, HashMap<String, ArrayList<Student>>> czbkMap = new HashMap<String, HashMap<String, ArrayList<Student>>>();
// 北京校区
HashMap<String, ArrayList<Student>> bjCzbkMap = new HashMap<String, ArrayList<Student>>();
ArrayList<Student> array1 = new ArrayList<Student>();
Student s1 = new Student("杨腾宇", 26);
Student s2 = new Student("酷爱WAF", 28);
array1.add(s1);
array1.add(s2);
ArrayList<Student> array2 = new ArrayList<Student>();
Student s3 = new Student("陈浩元", 27);
Student s4 = new Student("贾伟", 29);
array2.add(s3);
array2.add(s4);
bjCzbkMap.put("基础班", array1);
bjCzbkMap.put("就业班", array2);
czbkMap.put("北京校区", bjCzbkMap);
// 西安校区
HashMap<String, ArrayList<Student>> xaCzbkMap = new HashMap<String, ArrayList<Student>>();
ArrayList<Student> array3 = new ArrayList<Student>();
Student s5 = new Student("范冰冰", 36);
Student s6 = new Student("李晨", 35);
array3.add(s6);
array3.add(s5);
ArrayList<Student> array4 = new ArrayList<Student>();
Student s7 = new Student("黄晓明", 39);
Student s8 = new Student("杨天宝", 30);
array4.add(s8);
array4.add(s7);
xaCzbkMap.put("基础班", array4);
xaCzbkMap.put("就业班", array3);
czbkMap.put("西安校区", xaCzbkMap);
// 广东校区
HashMap<String, ArrayList<Student>> gdCzbkMap = new HashMap<String, ArrayList<Student>>();
ArrayList<Student> array5 = new ArrayList<Student>();
Student s9 = new Student("卢本伟", 30);
Student s10 = new Student("刘谋", 33);
array5.add(s10);
array5.add(s9);
ArrayList<Student> array6 = new ArrayList<Student>();
Student s11 = new Student("好火药", 666);
Student s12 = new Student("好奶子", 688);
array6.add(s12);
array6.add(s11);
gdCzbkMap.put("就业班没得问题", array6);
gdCzbkMap.put("基础班没得商量", array5);
czbkMap.put("广东校区", gdCzbkMap);
Set<String> czbkMapSet = czbkMap.keySet();
for (String czbkMapKey : czbkMapSet) {
System.out.println(czbkMapKey);
HashMap<String, ArrayList<Student>> czbkMapValue = czbkMap.get(czbkMapKey);
Set<String> czbkMapValueSet = czbkMapValue.keySet();
for (String czbkMapValueKey : czbkMapValueSet) {
System.out.println("\t" + czbkMapValueKey);
ArrayList<Student> czbkMapValueValue = czbkMapValue.get(czbkMapValueKey);
for (Student student : czbkMapValueValue) {
System.out.println("\t\t" + student.getAge() + "---" + student.getName());
}
}
}
}
}
17. List,Set,Map等接口是否都继承自Map接口?
- List,Set不是继承自Map接口,它们继承自Collection接口
- Map接口本身就是一个顶层接口
18. Collections工具类的概述
- 是针对集合进行操作的工具类,都是静态方法。
19. Collection和Collections的区别?
- A. Collection 是单列集合的顶层接口,有两个子接口List和Set
- B. Collections 是针对集合进行操作的工具类,可以对集合进行排序和二分查找等方法
20. Collections工具类的常见方法讲解
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
public class CollectionsDemo {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(30);
list.add(20);
list.add(50);
list.add(10);
list.add(40);
System.out.println("list:" + list);
// public static <T> void sort(List<T> list) 排序 默认情况下是自然顺序。
// Collections.sort(list);
// System.out.println("list:" + list);
// [10, 20, 30, 40, 50]
// public static <T> int binarySearch(List<?> list,T key): 二分查找
// System.out
// .println("binarySearch:" + Collections.binarySearch(list, 30));
// System.out.println("binarySearch:"
// + Collections.binarySearch(list, 300));
// public static <T> T max(Collection<?> coll): 最大值
// System.out.println("max:"+Collections.max(list));
// Collections.reverse(list); 反转
// System.out.println("list:" + list);
//public static void shuffle(List<?> list): 随机置换
Collections.shuffle(list);
System.out.println("list:" + list);
}
}