本文共 7095 字,大约阅读时间需要 23 分钟。
1.1 Map接口概述
我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图。A:Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储B:Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。C:Collection中的集合称为单列集合,Map中的集合称为双列集合。需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。1.2 Map常用功能
A:映射功能:V put(K key, V value) :以键=值的方式存入Map集合B:获取功能:V get(Object key):根据键获取值int size():返回Map中键值对的个数C:判断功能:boolean containsKey(Object key):判断Map集合中是否包含键为key的键值对boolean containsValue(Object value):判断Map集合中是否包含值为value键值对boolean isEmpty():判断Map集合中是否没有任何键值对D:删除功能:void clear():清空Map集合中所有的键值对V remove(Object key):根据键值删除Map中键值对E:遍历功能:Set<Map.Entry<K,V>> entrySet():将每个键值对封装到一个个Entry对象中,再把所有Entry的对象封装到Set集合中返回Set<K> keySet() :将Map中所有的键装到Set集合中返回Collection<V> values():返回集合中所有的value的值的集合1.2.1 案例代码六:package com.itheima_01;import java.util.HashMap;import java.util.Map;/* * Map的常用功能: * 映射功能: * V put(K key, V value) * 获取功能: * V get(Object key) * int size() * 判断功能: * boolean containsKey(Object key) boolean containsValue(Object value) boolean isEmpty() * 删除功能: * void clear() * V remove(Object key) * * 遍历功能: * Set> entrySet() * * * Set keySet() * Collection values() */public class MapDemo2 {public static void main(String[] args) {//创建Map对象Map map = new HashMap ();//V put(K key, V value) :就是将key映射到value,如果key存在,则覆盖value,并将原来的value返回System.out.println(map.put("ITCAST001", "张三"));System.out.println(map.put("ITCAST002", "李四"));System.out.println(map.put("ITCAST001", "王五"));//void clear() : 清空所有的对应关系 //map.clear();//V remove(Object key) :根据指定的key删除对应关系,并返回key所对应的值,如果没有删除成功则返回null//System.out.println(map.remove("ITCAST005"));//boolean containsKey(Object key) : 判断指定key是否存在//System.out.println(map.containsKey("ITCAST003"));//boolean containsValue(Object value):判断指定的value是否存在//System.out.println(map.containsValue("王五"));//boolean isEmpty() : 判断是否有对应关系//System.out.println(map.isEmpty());//int size() : 返回对应关系的个数//System.out.println(map.size());//V get(Object key) : 根据指定的key返回对应的valueSystem.out.println(map.get("ITCAST002"));System.out.println(map);}}
1.2.2 案例代码七:
package com.itheima_01;import java.util.Collection;import java.util.HashMap;import java.util.Map;import java.util.Set;/* * SetkeySet() * Collection values() */public class MapDemo3 {public static void main(String[] args) {//创建Map对象Map map = new HashMap ();//添加映射关系map.put("ITCAST001", "张三");map.put("ITCAST002", "李四");map.put("ITCAST005", "李四");//Set keySet() : 以Set的形式获返回所有的keySet keys = map.keySet();for (String key : keys) {System.out.println(key);}System.out.println("-----------");//Collection values() :Collection values = map.values();for (String value : values) {System.out.println(value);}}}
1.3 Map的两种遍历方式1.3.1 利用keySet()方法遍历
package com.itheima_01;import java.util.HashMap;import java.util.Map;import java.util.Set;/* * Map的第一种遍历方式: * 首先召集所有的丈夫 * 遍历所有的丈夫 * 获取每一个丈夫 * 让每一个丈夫去找他自己的媳妇 */public class MapDemo4 {public static void main(String[] args) {//创建Map对象Mapmap = new HashMap ();//添加映射关系map.put("谢婷疯", "张箔纸");map.put("陈关西", "钟欣桶");map.put("李亚碰", "王飞");//遍历Map对象//首先召集所有的丈夫Set keys = map.keySet();//遍历所有的丈夫for (String key : keys) {//让每个丈夫去找他自己的媳妇就可以了String value = map.get(key);System.out.println("丈夫:" + key + "---" + "媳妇:" + value);}}}
1.3.2 利用entrySet()方法遍历
package com.itheima_01;import java.util.HashMap;import java.util.Map;import java.util.Set;/* * Map的第二种遍历方式: * 通过结婚证对象来获取丈夫和媳妇 * * class 结婚证{ * K 丈夫; * V 媳妇; * * public 结婚证(K 丈夫,V 媳妇) { * this.丈夫 = 丈夫; * this.媳妇 = 媳妇; * } * * * public K get丈夫() { * return 丈夫; * } * * public V get媳妇() { * return 媳妇; * } * } * * * class Entry { * K key; * V value; * * public Entry(K key,V value) { * this.key = key; * this.value = value; * } * * * public K getKey() { * return key; * } * * public V getValue() { * return value; * } * } * * Set > entrySet() * */public class MapDemo5 {public static void main(String[] args) {//创建Map对象Map map = new HashMap ();//添加映射关系map.put("尹志平", "小龙女");map.put("令狐冲", "东方菇凉");map.put("玄慈", "叶二娘");//获取所有的结婚证对象Set > entrys = map.entrySet();//遍历包含了结婚证对象的集合for (Map.Entry entry : entrys) {//获取每个单独的结婚证对象//通过结婚证对象获取丈夫和媳妇String key = entry.getKey();String value = entry.getValue();System.out.println("丈夫:" + key + "---" + "媳妇:" + value);}}}
1.3.3 练习:
A:以key为学号字符串,value为学生姓名存入HashMap集合,分别以两种方式遍历集合1.3.3.1 案例代码八:package com.itheima_02;import java.util.HashMap;import java.util.Map;import java.util.Set;/* * * 使用HashMap存储数据并遍历(字符串作为key) * */public class HashMapDemo {public static void main(String[] args) {//创建Map对象HashMaphm = new HashMap ();//添加映射关系hm.put("ITCAST001", "张三");hm.put("ITCAST002", "李四");hm.put("ITCAST003", "王五");hm.put("ITCAST003", "赵六");//遍历Map对象//方式1 获取所有的key,通过key来获取valueSet keys = hm.keySet();for (String key : keys) {String value = hm.get(key);System.out.println(key + "=" + value);}System.out.println("------------------");//方式2:获取所有的结婚证对象,然后通过结婚证对象获取丈夫和媳妇Set > entrys = hm.entrySet();for (Map.Entry entry : entrys) {String key = entry.getKey();String value = entry.getValue();System.out.println(key + "=" + value);}}}B: 定义一个学生类,学生类中有name和age两个属性,创建三个学生对象,分别对name和age赋值,然后以key为学生对象,value为学生的学号的方式存入```HashMap集合,利用两种方式遍历这个Map1.3.3.2 案例代码九:
package com.itheima_02;
import java.util.HashMap;import java.util.Map;import java.util.Map.Entry;import java.util.Set;/*/
public class HashMapDemo2 { public static void main(String[] args) { //创建Map对象HashMap<Student,String> hm = new HashMap<Student,String>();//创建key对象Student s = new Student("zhangsan",18);Student s2 = new Student("lisi",20);Student s3 = new Student("lisi",20);//添加映射关系hm.put(s, "ITCAST001");hm.put(s2, "ITCAST002");hm.put(s3, "ITCAST002");//遍历Map对象//方式1: 获取所有的key,通过key来获取valueSet<Student> keys = hm.keySet();for (Student key : keys) { String value = hm.get(key);System.out.println(key + "=" + value);}System.out.println("-----");//方式2:获取所有结婚证对象,通过结婚证对象获取丈夫和媳妇Set<Map.Entry<Student, String>> entrys = hm.entrySet();for (Entry<Student, String> entry : entrys) { Student key = entry.getKey();String value = entry.getValue();System.out.println(key + "=" + value);}}}1.4 可变参数1.4.1 知识概述当参数不确定的时候, 类型要明确Java可以把多个参数直接帮我们转成数组
理解: 可变参数本质就是一个长度可变的数组.
格式:
实参: 一个参数一个参数的传递 形参: 类型…变量名
1.4.2 注意
在可变参数之后不可以再追加参数参数的数量定义, 可以给多个甚至也可以一个都不不给1.4.3 案例代码十:Public static int getSum(int…num){int sum = 0;for(int i = 0; i < num.length; i++){sum+=num[i];}r[/i]eturn sum;}
转载于:https://blog.51cto.com/13517854/2097264