Map:用于保存具有映射关系的数据,因此Map集合里有两组值:key和value(key不允许重复,同一个Map里任何两个key通过equals方法比较都返回false)(key和value都可以是任何类型的引用数据)
Map接口下有:
HashMap、LinkedHashMap、SortedMap(接口)、TreeMap、EnumMap等子接口和实现类。
Map与List的相同点:元素之间可重复,可以根据索引来查找;
Map与List的不同点:Map索引key不再使用整数值,而是以另一个对象作为索引。——有时,Map称为**“字典”**或关联数组。
一、HashMap实现类
keySet: 把Map集合中所有的key放在一起,它们就组成了一个Set集合(没有顺序,不可重复)——>keySet()方法,输出所有key
Map的遍历:通过遍历key来实现遍历所有的key-value对
import java.util.*;
public class MapTest
{
public static void main(String[] args)
{
var map = new HashMap();//HashMap实现类
//key-value
map.put("你好",10);
map.put("我好",30);
map.put("他好",58);
map.put("大家好",58);//value可重复
//输出Map集合包含的key-value对
System.out.println(map);
//用新的value覆盖原有的value,则put()方法会返回被覆盖的value
System.out.println(map.put("你好",90));//输出10
//判断是否包含指定的key或value
System.out.println("是否包含值为:他好 的key?"+ map.containsKey("他好"));
System.out.println("是否包含值为:58 的value?"+ map.containsValue(58));
//通过foreach循环遍历出所有key。只能通过遍历key来实现遍历key-value对
//而一般的对象可以直接遍历对象本身,如:for(var a: apple)
for(var key:map.keySet())//keySet方法:返回Map中所有key组成的set集合
{
System.out.println(key +"——>"+map.get(key));
//get(key)用于返回指定key所对应的value
}
//根据key来删除key-value对
map.remove("大家好");
System.out.println(map);
}
}
二、LinkedHashMap实现类
是HashMap的一个子类,使用双向链表来维护key-value对的顺序。
功能:LinkedHashMap可以记住key-value的添加顺序,遍历时会按照顺序输出。
而HashMap无法记住顺序,是把key放在一个Set集合中。
import java.util.*;
public class LinkedHashMapTest
{
public static void main(String[] args)
{
var scores = new LinkedHashMap();
var s = new HashMap();
scores.put("语文",80);
scores.put("数学",90);
scores.put("英语",60);
s.put("语文",80);
s.put("数学",90);
s.put("英语",60);
//遍历方法一:通过forEach()方法遍历scores里的所有key-value对
System.out.println("LinkedHashMap:");
scores.forEach((key,value) -> System.out.println(key + "-->" + value));
System.out.println("HashMap:");
s.forEach((key,value) -> System.out.println(key + "-->" + value));
//遍历方法二:通过foreach
System.out.println("第二种遍历方法:");
System.out.println("LinkedHashMap:");
for(var key:scores.keySet())//keySet方法:返回Map中所有key组成的set集合
{
System.out.println(key +"——>"+scores.get(key));
//get(key)用于返回指定key所对应的value
}
System.out.println("HashMap:");
for(var key:s.keySet())//keySet方法:返回Map中所有key组成的set集合
{
System.out.println(key +"——>"+s.get(key));
//get(key)用于返回指定key所对应的value
}
}
}