“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]]
  
== 1.Map接口中的常用方法 ==
 
  
 
表6-2 map接口常用方法
 
表6-2 map接口常用方法
第17行: 第20行:
  
 
下面程序演示了Map接口中的方法。
 
下面程序演示了Map接口中的方法。
<nowiki>public static void main(String[] args) {
+
===初始化集合===
Map<String, String> map = new HashMap();
+
<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<>();
 
//添加元素
 
//添加元素
map.put("01", "Think in java");
+
System.out.println("执行添加元素操作...");
map.put("02", "java 讲义");
+
m.put("01", "Think in java");
map.put("03", "java 语言程序设计");
+
m.put("02", "java 讲义");
map.put("04", "疯狂java讲义");
+
m.put("03", "java 语言程序设计");
 +
m.put("04", "疯狂java讲义");
 +
 
//删除元素
 
//删除元素
map.remove("03");
+
System.out.println("执行删除元素操作...");
System.out.println("集合中是否包含 \"java 语言程序设计\" :"+map.containsKey("03"));
+
m.remove("03");
 +
System.out.println("集合中是否包含 \"java 语言程序设计\" :"+m.containsKey("03"));
 
//修改元素的值
 
//修改元素的值
map.put("02", "平凡的世界");
+
System.out.println("执行修改元素操作...");
System.out.println("集合中是否包含 \"java 讲义\" "+map.containsValue("java 讲义"));
+
m.put("02", "平凡的世界");
//获取集合中的元素
+
System.out.println("编号02商品修改为:"+m.get("02"));
System.out.println("编号02的名称为:"+map.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
+
  <nowiki>集合中是否包含 "java 语言程序设计" :false
 
集合中是否包含 "java 讲义" :false
 
集合中是否包含 "java 讲义" :false
 
编号02的名称为:平凡的世界</nowiki>
 
编号02的名称为:平凡的世界</nowiki>
==2.遍历Map集合==
+
====练一练:完成增删查改操作====
 +
*添加("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) {
+
<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) {
+
<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接口中的常用方法

Java6-3.png


表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程序设计