map的一些输出方式
- map的相关资料
- map遍历的一些方式
- map遍历和for循环的替用(实例)
- 题目:有两个字符串str和str1,判断字符串empId是否在其两个字符串中之一,如果存在则输出'empId'
- for实现
- map实现
- forEach和map的区别
- 相同点
- 区别
map的相关资料
Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象。
Map的接口
Map---实现Map
Map.Entry--Map的内部类,描述Map中的按键/数值对。
SortedMap—扩展Map,使按键保持升序排列
equals(Object o) 比较指定对象与此 Map 的等价性
hashCode() 返回此 Map 的哈希码
clear() 从 Map 中删除所有映射
remove(Object key) 从 Map 中删除键和关联的值
put(Object key, Object value) 将指定值与指定键相关联
clear() 从 Map 中删除所有映射
putAll(Map t) 将指定 Map 中的所有映射复制到此 map
entrySet() 返回 Map 中所包含映射的 Set 视图。 Set 中的每个元素都是一个 Map.Entry 对象,可以使用 getKey() 和 getValue() 方法(还有一个 setValue() 方法)访问后者的键元素和值元素
keySet() 返回 Map 中所包含键的 Set 视图。 删除 Set 中的元素还将删除 Map 中相应的映射(键和值)
values() 返回 map 中所包含值的 Collection 视图。 删除 Collection 中的元素还将删除 Map中相应的映射(键和值)
get(Object key) 返回与指定键关联的值
containsKey(Object key) 如果 Map 包含指定键的映射,则返回 true
containsValue(Object value) 如果此 Map 将一个或多个键映射到指定值,则返回 true
isEmpty() 如果 Map 不包含键-值映射,则返回 true
size() 返回 Map 中的键-值映射的数目
map遍历的一些方式
import java.util.*;
public class test {
public static void main(String[] args) {
HashMap<Integer,String> hashMap=new HashMap<>();
hashMap.put(10,"a");
hashMap.put(5,"c");
hashMap.put(18,"b");
//三种遍历方式
//1. 使用keySet方法遍历key,再通过key获取value
for(int key:hashMap.keySet()){
System.out.println(key+" "+hashMap.get(key));
}
//2. 通过entrySet方法获取Map的内部类Entry的一个Set集合
// 再通过iterator方法获取一个迭代器,再通过迭代器迭代输出
Iterator iterator=hashMap.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<Integer,String> entry=(Map.Entry<Integer, String>)iterator.next();
System.out.println(entry.getKey()+" "+entry.getValue());
}
//3. 同样通过entrySet,不过不用迭代器,直接foreach输出
for(Map.Entry<Integer,String> entry:hashMap.entrySet()){
System.out.println(entry.getKey()+" "+entry.getValue());
}
}
}
map遍历和for循环的替用(实例)
题目:有两个字符串str和str1,判断字符串empId是否在其两个字符串中之一,如果存在则输出’empId’
for实现
package test;
public class Test01 {
public static void main(String[] args) {
StringBuffer strBuffer = new StringBuffer();
String str= "a,b,c,d";
String str1= "c,d,e,f";
String[] strArray =str.split(",");// 将参与人分割成数组,
String[] str1Array = str1.split(",");// 将访问人分割成数组,
String empId="c";
int b=0;
for (int j = 0; j < strArray.length; j++) {
if (empId.equals(strArray[j])) {
strBuffer.append("\'" + empId + "\'");
b++;
break;
}
}
for (int a = 0; a < str1Array.length; a++) {
if (empId.equals(str1Array[a]) && b==0) {
strBuffer.append("\'" + empId + "\'");
break;
}
}
System.out.println(strBuffer);
}
}
map实现
/package test;
public class Test01 {
public static void main(String[] args) {
StringBuffer strBuffer = new StringBuffer();
String str= "a,b,c,d";
String str1= "c,d,e,f";
String[] strArray =str.split(",");// 将参与人分割成数组,
String[] str1Array = str1.split(",");// 将访问人分割成数组,
String empId="c";
int b=0;
Map<String, Integer> map = new HashMap<String, Integer>();
for (int j = 0; j < strArray.length; j++) {
map.put(strArray[j], b);
b++;
}
if (str1.length() != 0) {
for (int a = 0; a < str1Array.length; a++) {
map.put(str1Array[a], b);
b++;
}
}
if (map.get("c") != null) {
strBuffer.append("\'" + empId + "\'");
}
for (String key : map.keySet()) {
System.out.println(key + " " + map.get(key));
}
System.out.println(strBuffer);
}
}
由map结果遍历可知,map中不允许键重复,后者覆盖前者。
forEach和map的区别
相同点
都是循环遍历数组中的每一项
forEach和map方法里每次执行匿名函数都支持3个参数,参数分别是item(当前每一项),index(索引值),arr(原数组)
匿名函数中的this都是指向window
只能遍历数组
都不会改变原数组
区别
map方法
1.map方法返回一个新的数组,数组中的元素为原始数组调用函数处理后的值。
2.map方法不会对空数组进行检测,map方法不会改变原始数组。
3.浏览器支持:chrome、Safari1.5+、opera都支持,IE9+,
array.map(function(item,index,arr){},thisValue)
var arr = [0,2,4,6,8];
var str = arr.map(function(item,index,arr){
console.log(this); //window
console.log("原数组arr:",arr); //注意这里执行5次
return item/2;
},this);
console.log(str);//[0,1,2,3,4]
若arr为空数组,则map方法返回的也是一个空数组。
forEach方法
1.forEach方法用来调用数组的每个元素,将元素传给回调函数
2.forEach对于空数组是不会调用回调函数的。
Array.forEach(function(item,index,arr){},this)
var arr = [0,2,4,6,8];
var sum = 0;
var str = arr.forEach(function(item,index,arr){
sum += item;
console.log("sum的值为:",sum); //0 2 6 12 20
console.log(this); //window
},this)
console.log(sum);//20
console.log(str); //undefined
无论arr是不是空数组,forEach返回的都是undefined。这个方法只是将数组中的每一项作为callback的参数执行一次。