提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象。其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类型的,就像数组中的元素还可以是数组一样。
Map 接口主要有两个实现类:HashMap 类和 TreeMap 类。其中,HashMap 类按哈希算法来存取键对象,而 TreeMap 类可以对键对象进行排序。
基本思路:先取出集合中的键对象,再通过键对象访问它的值。
实现方法:通过集合对象.keySet();
取出集合中所有的键对象放入set集合里,然后通过foreach遍历,使用集合对象.get();
方法取出。
代码如下:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class test {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Map<String, Integer> st=new HashMap<>();
st.put("iphone", 10);
st.put("redmi", 100);
st.put("redmik50", 100);
st.put("redmik40", 100);
Set<String> lists=st.keySet(); //重点
for (String str : lists) {
System.out.println(str+"--->"+st.get(str));
}
}
}
结果:
redmi--->100
redmik50--->100
redmik40--->100
iphone--->10
实现思想:将键对象和对应的值看为一个整体,放到一个Set集合中。
实现方法:需要利用Entry接口,将Map集合键值对转为Set集合,然后通过foreach循环调用接口中getKey()和getValue()方法。
interface Entry<K, V>
K getKey();
V getValue();
范例:Set
代码如下(示例):
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class test {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Map<String, Integer> st=new HashMap<>();
st.put("iphone", 10);
st.put("redmi", 100);
st.put("redmik50", 100);
st.put("redmik40", 100);
Set<Map.Entry<String, Integer>> lists=st.entrySet(); //重点
for (Map.Entry<String, Integer> entry : lists) { //重点
System.out.println(entry.getKey()+" -->"+entry.getValue());
}
}
}
结果:
key redmi---> value 100
key redmik50---> value 100
key redmik40---> value 100
key iphone---> value 10
JDK8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。
实现思想:
public interface BiConsumer<T, U> //接口无法直接实例化,可以使用匿名内部类的方法
代码如下(示例):
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;
public class test {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Map<String, Integer> st = new HashMap<>();
st.put("iphone", 10);
st.put("redmi", 100);
st.put("redmik50", 100);
st.put("redmik40", 100);
st.forEach(new BiConsumer<String, Integer>() { //匿名内部类
@Override
public void accept(String t, Integer u) {
System.out.println("key " + t + "--->" + " value " + u);
}
});
}
}
结果:
key redmi---> value 100
key redmik50---> value 100
key redmik40---> value 100
key iphone---> value 10
通过lambda化简:
import java.util.HashMap;
import java.util.Map;
public class test {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Map<String, Integer> st = new HashMap<>();
st.put("iphone", 10);
st.put("redmi", 100);
st.put("redmik50", 100);
st.put("redmik40", 100);
st.forEach((t,u)->System.out.println("key " + t + "--->" + " value " + u)); //简化后
}
}
结果:
key redmi---> value 100
key redmik50---> value 100
key redmik40---> value 100
key iphone---> value 10
可以看出简化后,代码更简洁使用更方便。