JavaSE十四(Map)

it2024-08-12  37

文章目录

Map1.1 Map集合的概述和使用1.2 Map集合的基本功能1.3Map集合的获取功能1.4 Map集合的遍历(方式1)1.5 Map集合的遍历(方式2)1.6 案例:HashMap集合存储学生对象并遍历1.7 案例:HashMap集合存储学生对象并遍历(二)1.8 案例:ArrayList集合存储HashMap元素并遍历1.9 案例:HashMap集合存储ArrayList集合并遍历2.0 案例:统计字符串中每个字符出现的次数

Map

1.1 Map集合的概述和使用

Map集合的概述

Interface Map<K,V> K: 键的类型; V:值的类型;

将键映射到值的对象; 不能包含重复的键;每个键可以映射到最多一个值

举例:学生的学号和姓名

​ cs0001 张三丰​ cs0002 李连杰​ cs0003 周星驰

创建集合的对象

多态的方式具体的实现类HashMap public class MapDemo01 { public static void main(String[] args) { //创建集合对象 Map<String,String> map = new HashMap<String,String>();//HashMap重写了toString方法用=拼接 //V put(K key, V value)将指定的值与该映射中的指定的键相关联 map.put("cs0001","张三丰"); map.put("cs0002","林黛玉"); map.put("cs0003","陈大帅"); System.out.println(map);//{cs0002=林黛玉, cs0003=陈大帅, cs0001=张三丰} //输出集合对象 System.out.println(map); //{cs0002=林黛玉, cs0003=陈大帅, cs0001=张三丰} //{cs0002=林黛玉, cs0003=张无忌, cs0001=张三丰} //V put 可以用来添加和修改,二次添加相当于覆盖前一个值,也就是修改 } }

1.2 Map集合的基本功能

方法名说明V put(K key,V value)添加元素V remove(Object key)根据键删除键值对元素void clear()移除所有键值对元素boolean containsKey(Object key)判断集合是否包含指定的键boolean containsValue(Object value)判断集合是否包含指定的值boolean isEmpty()判断集合是否为空int size()集合的长度,也就是集合中键值对的个数

1.3Map集合的获取功能

方法名说明V get(Object key)根据键获取值Set keySet()获取所有键的集合Collection values()获取所有值的集合Set<Map.Entry<K,V>> entrySet()获取所有键值对对象的集合 public class MapDemo02 { public static void main(String[] args) { //创建集合对象 Map<String,String> map = new HashMap<String,String>(); //添加元素 map.put("杨过","小龙女"); map.put("郭靖","黄蓉"); map.put("黄晓明","杨颖"); /* //V get(Object key) 根据键获取值 System.out.println(map.get("杨过")); System.out.println(map.get("哈哈哈")); //小龙女 //null*/ /* //Set<K> keySet():获取所有键的集合 Set<String> set = map.keySet(); for (String s : set){ System.out.println(s); } //杨过 //郭靖 //黄晓明*/ //Collection<V> values():获取所有值的集合 Collection<String> values = map.values(); for (String v : values){ System.out.println(v); } //小龙女 //黄蓉 //杨颖 } }

1.4 Map集合的遍历(方式1)

我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合

遍历思路:

把所有的丈夫都集中起来遍历丈夫的集合,获取到每一个丈夫根据丈夫去找对应的妻子

转换为Map集合中的操作:

获取所有键的集合。用KeySet()方法实现遍历键的集合,获取到每一个键。用增强for实现根据键去找值。用get(Object key)方法实现 public class MapDemo03 { public static void main(String[] args) { //创建集合对象 Map<String,String> map = new HashMap<String, String>(); //添加元素 map.put("杨过","小龙女"); map.put("张三丰","张无忌"); map.put("李小龙","李国豪"); //获取所有键的集合。用KeySet实现 Set<String> keySet = map.keySet(); //遍历集合 for (String key : keySet){ String value = map.get(key); System.out.println(key+","+value); } } } ------------------ 杨过,小龙女 李小龙,李国豪 张三丰,张无忌

1.5 Map集合的遍历(方式2)

我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合

遍历思路:

获取所有结婚证的集合遍历结婚证的集合,得到每一个结婚证根据结婚证获取丈夫和妻子

转换为Map集合中的操作:

获取所有键值对对象的集合

Set<Map.Entry<K,V>> entrySet(): 获取所有键值对对象的集合

遍历所有键值对对象的集合,得到每一个键值对对象

​ 用增强for实现,得到每一个Map.Entry

根据键值对对象获取键和值

用getKey()得到键用getValue()得到值 public class MapDemo04 { public static void main(String[] args) { //创建集合对象 Map<String,String> map = new HashMap<String, String>(); //添加元素 map.put("杨过","小龙女"); map.put("张三丰","张无忌"); map.put("李小龙","李国豪"); //获取所有键值对对象的集合 Set<Map.Entry<K,V>> entrySet() Set<Map.Entry<String, String>> entrySet = map.entrySet(); //遍历键值对对象的集合,得到每一个键值对对象 for (Map.Entry<String,String> entry : entrySet){ //根据键值对对象获取键和值 String key = entry.getKey(); String value = entry.getValue(); System.out.println(key+","+value); } } } ------------------- 杨过,小龙女 李小龙,李国豪 张三丰,张无忌

1.6 案例:HashMap集合存储学生对象并遍历

需求:创建一个HashMap集合,键是学号(String),值是学生对象(Student)。存储三个键值对元素,并遍历

思路:

定义学生类创键HashMap集合对象创建学生对象把学生添加到集合遍历集合 方式1:键找值方式2:键值对找键和值 public class HashMapDemo { public static void main(String[] args) { //创建HashMap集合对象 HashMap<String,Student> map = new HashMap<String, Student>(); //创建学生对象 Student s1 = new Student("陈大帅",18); Student s2 = new Student("陈二帅",38); Student s3 = new Student("陈三帅",8); //把学生对象添加到集合 map.put("cs001",s1); map.put("cs002",s2); map.put("cs003",s3); //遍历结合方式一,键找值 Set<String> set = map.keySet(); for (String s : set){ Student student = map.get(s); System.out.println(s+","+student.getName()+","+student.getAge()); } System.out.println("------------"); //遍历方式二,键值对对象找键和值 Set<Map.Entry<String, Student>> entrySet = map.entrySet(); for (Map.Entry<String, Student> entry : entrySet){ String key = entry.getKey(); Student value = entry.getValue(); System.out.println(key+","+value.getName()+","+value.getAge()); } } } ------------- cs001,陈大帅,18 cs002,陈二帅,38 cs003,陈三帅,8 ------------ cs001,陈大帅,18 cs002,陈二帅,38 cs003,陈三帅,8

1.7 案例:HashMap集合存储学生对象并遍历(二)

需求:创建一个HashMap集合,键是学生对象(Student),值是居住地(String)。存储多个键值对元素,并遍历。

要求保证键的唯一性:如果学生对象的成员变量值相同,我们就认为是同一个对象(这里要在学生类中重写两个方法)

思路:

定义学生类

创建HashMap集合对象

创建学生对象

把学生添加到集合

遍历集合

在学生类中重写两个

hashCode()equals() public class MapDemo { public static void main(String[] args) { //创建HashMap集合对象 HashMap<Student,String> map = new HashMap<Student,String>(); //创建学生对象 Student s1 = new Student("小红",11); Student s2 = new Student("大黄",22); Student s3 = new Student("小黑",33); Student s4 = new Student("大黄",22); //把学生对象添加到集合 map.put(s1,"南京"); map.put(s2,"扬州"); map.put(s3,"上海"); System.out.println("--------"); //遍历集合一 Set<Map.Entry<Student, String>> entrySet = map.entrySet(); for (Map.Entry<Student, String> me : entrySet){ Student key = me.getKey(); String value = me.getValue(); System.out.println(key.getName()+","+key.getAge()+","+value); } System.out.println("------"); 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); } } } ----------- 小红,11,南京 大黄,22,扬州 小黑,33,上海 ------ 小红,11,南京 大黄,22,昆山 小黑,33,上海

1.8 案例:ArrayList集合存储HashMap元素并遍历

需求:创建一个ArrayList集合,存储三个元素,每一个元素都是HashMap,每一个HashMap的键和值都是String,并遍历

思路:

创建ArrayList集合创建HashMap集合,并添加键值对元素把HashMap作为元素添加到ArrayList集合遍历ArrayList集合 public class ArrayListIncludeHashMapDemo { public static void main(String[] args) { //创建ArrayList集合对象 ArrayList<HashMap<String, String>> array = new ArrayList<HashMap<String, String>>(); //创建HashMap集合,并添加键值对元素 HashMap<String, String> hm1 = new HashMap<String, String>(); hm1.put("张三", "李四"); hm1.put("郭靖", "黄蓉"); //把HashMap作为元素添加到ArrayList集合中 array.add(hm1); HashMap<String, String> hm2 = new HashMap<String, String>(); hm2.put("李静", "大同"); hm2.put("杨过", "小龙女"); array.add(hm2); HashMap<String, String> hm3 = new HashMap<String, String>(); hm3.put("范闲", "鸡腿妹妹"); hm3.put("张刚", "冯小刚"); array.add(hm3); //遍历ArrayList集合 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.9 案例:HashMap集合存储ArrayList集合并遍历

需求:创建一个HashMap集合,存储三个键值对元素,每一个键值对元素的键都是String,值是ArrayList,

每一个ArrayList的元素是String,并遍历

思路:

创建HashMap集合创建ArrayList集合,并添加元素将ArrayList作为元素添加到HashMap集合中遍历HashMap集合 public class HashMapIncludeArrayListDemo { public static void main(String[] args) { //创建HashMap集合 HashMap<String, ArrayList<String>> hm = new HashMap<String, ArrayList<String>>(); //创建ArrayList集合 ArrayList<String> array1 = new ArrayList<String>(); array1.add("hello"); array1.add("world"); hm.put("cs01",array1); ArrayList<String> array2 = new ArrayList<String>(); array2.add("王二麻子"); array2.add("西施"); hm.put("cs002",array2); ArrayList<String> array3 = new ArrayList<String>(); array3.add("麻子"); array3.add("狗子"); hm.put("cs003",array3); //遍历HashMap集合 Set<String> keySet = hm.keySet(); for (String key : keySet){ System.out.println(key); ArrayList<String> arrayList = hm.get(key); for (String value : arrayList){ System.out.println("\t"+value); } } } } ------------- cs002 王二麻子 西施 cs003 麻子 狗子 cs01 hello world

2.0 案例:统计字符串中每个字符出现的次数

需求:键盘录入一个字符串,要求统计字符串中每个字符串出现的次数。

​ 举例:键盘录入"aababcabacbacde" 在控制台输出:“a(6)b(4)c(3)d(1)e(1)”

分析:

我们可以把结果分成几个部分来看:a(6),b(4),c(3),d(1),e(1)

每一个部分可以看成是:字符和字符对应的次数组成

这样的数据,我们可以通过HashMap集合来存储,键是字符,值是字符出现的次数

​ 注意:键是字符,类应该是Character;值是字符出现的次数,类型应该是Integer

思路:

键盘录入一个字符串创建HashMap集合,键是Character,值是Integer遍历字符串得到每一个字符拿得到的每一个字符作为键到HashMap集合中去找对应的值,看其返回值 如果返回值是null:说明该字符在HashMap集合中不存在,就把该字符作为键,1作为值存储如果返回值不是null:说明该字符在HashMap集合中存在,把该值+1,然后重新存储该字符和对应的值 遍历HashMap集合,得到键和值,按照要求进行拼接输出结果 public class HashMapDemo { public static void main(String[] args) { //1.键盘录入一个字符串 Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串:"); String line = sc.nextLine(); //2.创建HashMap集合, // HashMap<Character,Integer> hm = new HashMap<Character, Integer>(); TreeMap<Character,Integer> hm = new TreeMap<Character, Integer>(); //3.遍历字符串,得到每一个字符 for (int i=0;i<line.length();i++){ char key = line.charAt(i); //通过键获取到HashMap中对应的值 Integer vlaue = hm.get(key); //如果返回值是null:说明该字符在HashMap集合中不存在,就把该字符作为键,1作为值存储 if (vlaue == null){ hm.put(key,1); }else { //如果返回值不是null:说明该字符在HashMap集合中存在,把该值+1,然后重新存储该字符和对应的值 vlaue++; hm.put(key,vlaue); } } //遍历HashMap集合,得到键和值,按照要求进行拼接 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); } } -------------- 请输入一个字符串: ahdskghqoehakdhg a(2)q(1)s(1)d(2)e(1)g(2)h(4)k(2)o(1) ---------使用TreeMap后 请输入一个字符串: adsghaadaf a(4)d(2)f(1)g(1)h(1)s(1)
最新回复(0)