“Map接口和HashMap类”的版本间的差异
来自CloudWiki
(创建页面,内容为“前面我们简单介绍了Map接口和HashMap类,下面我们看一下Map集合中的具体应用。 == 1.Map接口中的常用方法 == 表6-2 map接口常用…”) |
|||
(未显示同一用户的17个中间版本) | |||
第1行: | 第1行: | ||
前面我们简单介绍了Map接口和HashMap类,下面我们看一下Map集合中的具体应用。 | 前面我们简单介绍了Map接口和HashMap类,下面我们看一下Map集合中的具体应用。 | ||
+ | ==引用接口== | ||
+ | import java.util.*; | ||
+ | == 1.Map接口中的常用方法 == | ||
+ | [[文件:java6-3.png]] | ||
− | |||
表6-2 map接口常用方法 | 表6-2 map接口常用方法 | ||
第17行: | 第20行: | ||
下面程序演示了Map接口中的方法。 | 下面程序演示了Map接口中的方法。 | ||
− | + | ===初始化集合=== | |
− | Map<String, String> | + | <nowiki> |
+ | Map<String, String> m= new HashMap<>();</nowiki> | ||
+ | |||
+ | ===增添元素=== | ||
+ | <nowiki> | ||
+ | //添加元素 | ||
+ | System.out.println("执行添加元素操作..."); | ||
+ | m.put("01", "Think in java"); | ||
+ | m.put("02", "java 讲义"); | ||
+ | m.put("03", "java 语言程序设计"); | ||
+ | m.put("04", "疯狂java讲义");</nowiki> | ||
+ | ===删除元素=== | ||
+ | <nowiki>//删除元素 | ||
+ | System.out.println("执行删除元素操作..."); | ||
+ | m.remove("03"); | ||
+ | System.out.println("集合中是否包含 \"java 语言程序设计\" :"+m.containsKey("03"));</nowiki> | ||
+ | ===查看元素(特色)=== | ||
+ | 如果该元素不存在,则返回什么呢 ? | ||
+ | |||
+ | <nowiki>System.out.println(m.get("02")); | ||
+ | System.out.println(m.get("05"));</nowiki> | ||
+ | |||
+ | ===修改元素=== | ||
+ | <nowiki>/ /修改元素的值 | ||
+ | System.out.println("执行修改元素操作..."); | ||
+ | m.put("02", "平凡的世界"); | ||
+ | System.out.println("编号02商品修改为:"+m.get("02"));</nowiki> | ||
+ | |||
+ | ===查询元素是否存在=== | ||
+ | <nowiki> | ||
+ | String id="02"; | ||
+ | boolean b = m.containsKey(id); | ||
+ | if(b==false) { | ||
+ | System.out.println(" 没有 "+id); | ||
+ | }else { | ||
+ | System.out.println(" 存在编号"+id); | ||
+ | //获取集合中的元素 | ||
+ | System.out.println("编号"+id+"的名称为:"+m.get("02")); | ||
+ | }</nowiki> | ||
+ | |||
+ | ===完整代码=== | ||
+ | <nowiki> | ||
+ | package task8; | ||
+ | |||
+ | import java.util.*; | ||
+ | |||
+ | public class Main { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | // TODO Auto-generated method stub | ||
+ | Map<String, String> m = new HashMap<>(); | ||
//添加元素 | //添加元素 | ||
− | + | System.out.println("执行添加元素操作..."); | |
− | + | m.put("01", "Think in java"); | |
− | + | m.put("02", "java 讲义"); | |
− | + | m.put("03", "java 语言程序设计"); | |
+ | m.put("04", "疯狂java讲义"); | ||
+ | |||
//删除元素 | //删除元素 | ||
− | + | System.out.println("执行删除元素操作..."); | |
− | System.out.println("集合中是否包含 \"java 语言程序设计\" :"+ | + | m.remove("03"); |
+ | System.out.println("集合中是否包含 \"java 语言程序设计\" :"+m.containsKey("03")); | ||
//修改元素的值 | //修改元素的值 | ||
− | + | System.out.println("执行修改元素操作..."); | |
− | System.out.println("集合中是否包含 | + | m.put("02", "平凡的世界"); |
− | //获取集合中的元素 | + | System.out.println("编号02商品修改为:"+m.get("02")); |
− | + | ||
− | }</nowiki> | + | String id="02"; |
+ | System.out.print("集合中是否包含"+id+"?"); | ||
+ | |||
+ | boolean b = m.containsKey("02"); | ||
+ | if(b==false) { | ||
+ | System.out.println(" 没有 "+id); | ||
+ | }else { | ||
+ | System.out.println(" 存在编号"+id); | ||
+ | //获取集合中的元素 | ||
+ | System.out.println("编号"+id+"的名称为:"+m.get("02")); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | } | ||
+ | |||
+ | </nowiki> | ||
程序运行结果如下: | 程序运行结果如下: | ||
− | + | <nowiki>集合中是否包含 "java 语言程序设计" :false | |
集合中是否包含 "java 讲义" :false | 集合中是否包含 "java 讲义" :false | ||
编号02的名称为:平凡的世界</nowiki> | 编号02的名称为:平凡的世界</nowiki> | ||
− | == | + | ====练一练:完成增删查改操作==== |
+ | *添加("06","商院面馆指南"),("07","商院面馆招商说明书") | ||
+ | *删除("06","商院面馆指南") | ||
+ | *查询Map中是否存在索引为07的元素,如果存在,把它打印出来。 | ||
+ | |||
+ | ==遍历Map集合== | ||
Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。如果要查询某个 Map以了解其哪些元素满足特定查询,或如果要迭代其所有元素,首先要使用Map提供的方法获取该 Map的“视图”,具体有两种遍历方法。 | Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。如果要查询某个 Map以了解其哪些元素满足特定查询,或如果要迭代其所有元素,首先要使用Map提供的方法获取该 Map的“视图”,具体有两种遍历方法。 | ||
===第一种:使用KeySet()方法。=== | ===第一种:使用KeySet()方法。=== | ||
KeySet()方法返回映射中所有关键字的Set集合。迭代键值Set,通过Map接口的get(key)方法,获取每一个键对应的值。具体用法如下: | KeySet()方法返回映射中所有关键字的Set集合。迭代键值Set,通过Map接口的get(key)方法,获取每一个键对应的值。具体用法如下: | ||
− | + | <nowiki>public static void main(String[] args) { | |
− | Map<String, String> map = new HashMap(); | + | Map<String, String> map = new HashMap<>(); |
map.put("01", "Think in java"); | map.put("01", "Think in java"); | ||
map.put("02", "java 讲义"); | map.put("02", "java 讲义"); | ||
第56行: | 第132行: | ||
System.out.println(key + "\t" + map.get(key)); | System.out.println(key + "\t" + map.get(key)); | ||
}</nowiki> | }</nowiki> | ||
+ | |||
===第二种:使用entrySet()方法=== | ===第二种:使用entrySet()方法=== | ||
Set<Map.Entry<K,V>> entrySet()方法返回此映射中包含的映射关系的 Set 视图。Map.Entry表示映射关系(一个关系就是一个键-值对),就是把(key-value)作为一个整体一对一对地存放到Set集合当中的。迭代后可以使用Map.Entry接口的getKey()和getValue()两种方法来取key和value。具体用法如下: | Set<Map.Entry<K,V>> entrySet()方法返回此映射中包含的映射关系的 Set 视图。Map.Entry表示映射关系(一个关系就是一个键-值对),就是把(key-value)作为一个整体一对一对地存放到Set集合当中的。迭代后可以使用Map.Entry接口的getKey()和getValue()两种方法来取key和value。具体用法如下: | ||
− | + | <nowiki>public static void main(String[] args) { | |
− | Map<String, String> map = new HashMap(); | + | Map<String, String> map = new HashMap<>(); |
map.put("01", "Think in java"); | map.put("01", "Think in java"); | ||
map.put("02", "java 讲义"); | map.put("02", "java 讲义"); | ||
第73行: | 第150行: | ||
System.out.println(e.getKey() + "\t" + e.getValue()); | System.out.println(e.getKey() + "\t" + e.getValue()); | ||
}</nowiki> | }</nowiki> | ||
+ | |||
+ | ====思考:怎样查找特定值的元素==== | ||
+ | |||
+ | ==练习== | ||
+ | 参考[[List接口和ArrayList类]]练习题的答案, | ||
+ | |||
+ | 用HashMap集合重写[[Java任务:图书的接口处理]]里BookDataSet类的成员变量和方法。 | ||
+ | |||
+ | ==练习题答案== | ||
+ | BookDataSet类: | ||
+ | <nowiki>package entity; | ||
+ | import java.util.*; | ||
+ | public class BookDataSet { | ||
+ | /*有商品的品种数,如num=5,代表目前经营5个品种的商品 */ | ||
+ | private int num=0; | ||
+ | |||
+ | /*存放的商品*/ | ||
+ | //private ArrayList<Goods> goods = new ArrayList<>(); | ||
+ | private HashMap<String,Goods> goods = new HashMap<>(); | ||
+ | |||
+ | public BookDataSet(){ | ||
+ | |||
+ | } | ||
+ | public BookDataSet(int num,HashMap<String,Goods> goods){ | ||
+ | |||
+ | this.num =num; | ||
+ | this.goods= goods; | ||
+ | } | ||
+ | |||
+ | public void getGoods(){ | ||
+ | System.out.println("站点商品明细:"); | ||
+ | //显示所有书籍 | ||
+ | Set<String> keys = goods.keySet(); | ||
+ | System.out.println("编号\t书名"); | ||
+ | System.out.println("***********************"); | ||
+ | //遍历keyset,通过map.get(key)方法获得value的值 | ||
+ | for (String key : keys) | ||
+ | System.out.println(key + "\t" + goods.get(key).toString()); | ||
+ | |||
+ | } | ||
+ | public Goods getGoods(String id){ | ||
+ | // 遍历所有的书籍信息 | ||
+ | return goods.get(id); | ||
+ | } | ||
+ | |||
+ | public void addGoods(Goods mygoods){ | ||
+ | |||
+ | String id = mygoods.cid; | ||
+ | this.goods.put(id, mygoods); | ||
+ | num += 1; | ||
+ | |||
+ | } | ||
+ | public void delGoods(Goods myGoods){ | ||
+ | //将数组中myGoods条目对应的商品数量减为0 | ||
+ | String id=myGoods.cid; | ||
+ | this.goods.remove(id); | ||
+ | } | ||
+ | |||
+ | public void ModifyGoods(Goods myGoods,int num){ | ||
+ | //修改商品的数目 | ||
+ | String id =myGoods.cid; | ||
+ | goods.get(id).number += num; | ||
+ | |||
+ | } | ||
+ | @Override | ||
+ | public String toString() { | ||
+ | int i; | ||
+ | String s=""; | ||
+ | for(i=0;i<this.num;i++){ | ||
+ | s +=goods.get(i).toString()+"\n"; | ||
+ | } | ||
+ | return s; | ||
+ | } | ||
+ | |||
+ | |||
+ | }</nowiki> | ||
+ | |||
返回 [[Java程序设计]] | 返回 [[Java程序设计]] |
2020年4月24日 (五) 03:19的最新版本
前面我们简单介绍了Map接口和HashMap类,下面我们看一下Map集合中的具体应用。
目录
引用接口
import java.util.*;
1.Map接口中的常用方法
表6-2 map接口常用方法
方法名 说 明 Object put(Object key,Object value) 插入新的对象,并用key作为其键字 void putAll(Map t) 将另一个Map中的所有对象复制进来 Set entrySet() 返回映射中的关键字-值对的集合 Set keySet() 返回映射中所有关键字的集合 Collection values() 返回映射中所有值的集合 Object remove(Object key) 删除指定的对象 Object get(Object key) 获取与key相联系的对象 boolean containsKey(Object key) 判断是否包含指定的键值 Boolean containsValue(Object value) 判断是否包含指定的对象
下面程序演示了Map接口中的方法。
初始化集合
Map<String, String> m= new HashMap<>();
增添元素
//添加元素 System.out.println("执行添加元素操作..."); m.put("01", "Think in java"); m.put("02", "java 讲义"); m.put("03", "java 语言程序设计"); m.put("04", "疯狂java讲义");
删除元素
//删除元素 System.out.println("执行删除元素操作..."); m.remove("03"); System.out.println("集合中是否包含 \"java 语言程序设计\" :"+m.containsKey("03"));
查看元素(特色)
如果该元素不存在,则返回什么呢 ?
System.out.println(m.get("02")); System.out.println(m.get("05"));
修改元素
/ /修改元素的值 System.out.println("执行修改元素操作..."); m.put("02", "平凡的世界"); System.out.println("编号02商品修改为:"+m.get("02"));
查询元素是否存在
String id="02"; boolean b = m.containsKey(id); if(b==false) { System.out.println(" 没有 "+id); }else { System.out.println(" 存在编号"+id); //获取集合中的元素 System.out.println("编号"+id+"的名称为:"+m.get("02")); }
完整代码
package task8; import java.util.*; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Map<String, String> m = new HashMap<>(); //添加元素 System.out.println("执行添加元素操作..."); m.put("01", "Think in java"); m.put("02", "java 讲义"); m.put("03", "java 语言程序设计"); m.put("04", "疯狂java讲义"); //删除元素 System.out.println("执行删除元素操作..."); m.remove("03"); System.out.println("集合中是否包含 \"java 语言程序设计\" :"+m.containsKey("03")); //修改元素的值 System.out.println("执行修改元素操作..."); m.put("02", "平凡的世界"); System.out.println("编号02商品修改为:"+m.get("02")); String id="02"; System.out.print("集合中是否包含"+id+"?"); boolean b = m.containsKey("02"); if(b==false) { System.out.println(" 没有 "+id); }else { System.out.println(" 存在编号"+id); //获取集合中的元素 System.out.println("编号"+id+"的名称为:"+m.get("02")); } } }
程序运行结果如下:
集合中是否包含 "java 语言程序设计" :false 集合中是否包含 "java 讲义" :false 编号02的名称为:平凡的世界
练一练:完成增删查改操作
- 添加("06","商院面馆指南"),("07","商院面馆招商说明书")
- 删除("06","商院面馆指南")
- 查询Map中是否存在索引为07的元素,如果存在,把它打印出来。
遍历Map集合
Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。如果要查询某个 Map以了解其哪些元素满足特定查询,或如果要迭代其所有元素,首先要使用Map提供的方法获取该 Map的“视图”,具体有两种遍历方法。
第一种:使用KeySet()方法。
KeySet()方法返回映射中所有关键字的Set集合。迭代键值Set,通过Map接口的get(key)方法,获取每一个键对应的值。具体用法如下:
public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("01", "Think in java"); map.put("02", "java 讲义"); map.put("03", "java 语言程序设计"); map.put("04", "疯狂java讲义"); // 先获取map集合的所有键的set集合,keyset() Set<String> keys = map.keySet(); System.out.println("编号\t书名"); System.out.println("***********************"); //遍历keyset,通过map.get(key)方法获得value的值 for (String key : keys) System.out.println(key + "\t" + map.get(key)); }
第二种:使用entrySet()方法
Set<Map.Entry<K,V>> entrySet()方法返回此映射中包含的映射关系的 Set 视图。Map.Entry表示映射关系(一个关系就是一个键-值对),就是把(key-value)作为一个整体一对一对地存放到Set集合当中的。迭代后可以使用Map.Entry接口的getKey()和getValue()两种方法来取key和value。具体用法如下:
public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("01", "Think in java"); map.put("02", "java 讲义"); map.put("03", "java 语言程序设计"); map.put("04", "疯狂java讲义"); // 先获取map集合的Map.Entry<key, value>的set集合, Set<Map.Entry<String, String>> entrys = map.entrySet(); System.out.println("编号\t书名"); System.out.println("***********************"); // 通过Map.Entry对象过得getKey和getValue方法获得键和值 for (Map.Entry<String, String> e : entrys) System.out.println(e.getKey() + "\t" + e.getValue()); }
思考:怎样查找特定值的元素
练习
参考List接口和ArrayList类练习题的答案,
用HashMap集合重写Java任务:图书的接口处理里BookDataSet类的成员变量和方法。
练习题答案
BookDataSet类:
package entity; import java.util.*; public class BookDataSet { /*有商品的品种数,如num=5,代表目前经营5个品种的商品 */ private int num=0; /*存放的商品*/ //private ArrayList<Goods> goods = new ArrayList<>(); private HashMap<String,Goods> goods = new HashMap<>(); public BookDataSet(){ } public BookDataSet(int num,HashMap<String,Goods> goods){ this.num =num; this.goods= goods; } public void getGoods(){ System.out.println("站点商品明细:"); //显示所有书籍 Set<String> keys = goods.keySet(); System.out.println("编号\t书名"); System.out.println("***********************"); //遍历keyset,通过map.get(key)方法获得value的值 for (String key : keys) System.out.println(key + "\t" + goods.get(key).toString()); } public Goods getGoods(String id){ // 遍历所有的书籍信息 return goods.get(id); } public void addGoods(Goods mygoods){ String id = mygoods.cid; this.goods.put(id, mygoods); num += 1; } public void delGoods(Goods myGoods){ //将数组中myGoods条目对应的商品数量减为0 String id=myGoods.cid; this.goods.remove(id); } public void ModifyGoods(Goods myGoods,int num){ //修改商品的数目 String id =myGoods.cid; goods.get(id).number += num; } @Override public String toString() { int i; String s=""; for(i=0;i<this.num;i++){ s +=goods.get(i).toString()+"\n"; } return s; } }
返回 Java程序设计