Map接口是在 java.util
包下的一个接口。他的形式是 public interface Map<K, V>
。其中K是键,V是值。
Map接口就是用来储存一个将键映射到值的对象。在映射中不能包含重复的键,每个键最多只能映射到一个值。
也就是说,Map集合中的元素是成对存在的,所以也被称为双列集合。
Map集合常用的实现类
HashMap
HashMap应该算Map中最重要的实现类了。它是基于哈希表的Map接口的实现类。HashMap是允许使用null值和null键的,另外,它是非同步的。
HashMap集合是一个无序的集合,这意味着它存储和取出元素的顺序可能不一致。
HashMap的底层实现:
JDk1.8之前:数组+单向链表。
JDK1.8之后:数组+单向链表/红黑树(链表的长度超过8)——可以用来提高查询的速度。
HashMap也有个子类是LinkedHashMap。它是基于哈希表和链表实现的。它是一个有序的集合。
LinkedhashMap的底层实现:
哈希表+链表。——>这样就能实现有序了,可以保证迭代的顺序。
Map接口中的常用方法
public V put(K key, V value)
** **- 把指定的键和指定的值添加到集合中。值得注意的是,如果K是一个新键,那么这里返回的是null。如果K是重复的,那么返回的被替换的那个V值。
public V get(Object key)
- 返回指定键所映射的值,如果该映射中不包含该键的映射关系,返回null。
public V remove(Object key)
- 如果key存在,将将其从此映射中移除,返回被删除的值。不存在的话就返回null。
public boolean containsKey(Object key)
** **- 如果此映射包含指定键的映射关系,就返回true。
public boolean containsValue(Object value)
- 如果此映射将一个或多个键映射到指定值,就返回true。
Map集合遍历的方式
keySet( )方法
该方法就是把Map集合中所有的key取出来存储到Set集合中。
这种方法就是通过键找值的方式来遍历Map集合。
实现步骤:
1、使用keySet( )方法将所有的key取出来存储到一个Set集合中。
2、遍历Set集合,获取到每一个key。
3、通过get(key)方法来找到value。
public class keySetDemo{
public static void main(String[] args){
//1.先创建一个map对象
Map<String, Integer> map = new HashMap<>();
map.put("小红", 1);
map.put("小明", 3);
map.put("小杰", 5);
//2.使用keySet()方法取出所有的key
Set<String> set = map.keySet();
//3.遍历Set集合,获取每一个key
//使用迭代器遍历集合
Iterator<String> it = set.iterator();
while(it.hasNext()){
String key = it.next();
//通过Map集合的get()方法,来获取value值
Integer value = map.get(key);
System.out.println(key + "=" + value);
}
//使用增强for来遍历集合
for(String key : set){
//通过Map集合的get()方法,来获取value值
Integer value = map.get(key);
System.out.println(key + "=" + value);
}
}
}
entrySet( )方法
返回该映射中Entry对象的Set集合。
在Map里面有个内部接口叫 Map.Entry<K, V>
。
Entry接口的作用:
当Map集合一创建的时候,就会在Map集合中创建一个Entry对象,用来记录键与值的映射关系。
实现步骤:
1、使用entrySet方法,取出多个Entry对象,存储到Set集合中。
2、遍历Set集合,获取每一个Entry对象。
3、使用Entry对象中的getKey()方法和getValue()方法来获取键与值。
public class EntryDemo{
public static void main(String[] args){
//1.先创建一个map对象
Map<String, Integer> map = new HashMap<>();
map.put("小红", 1);
map.put("小明", 3);
map.put("小杰", 5);
//2.使用entrySet方法来获取Entry对象
Set<Map.Entry<String, Integer>> set = map.entrySet();
//3.遍历Set集合
//使用迭代器遍历Set集合
Iterator<Map.Entry<String, Integer>> = set.iterator();
while(it.hasNext()){
Map.Entry<String, Integer> entry = it.next();
//4.使用Entry对象中的getKey()方法和getValue()方法来获取键与值。
String key = entry.getkey();
Integer value = entry.getValue();
System.out.println(key + "=" + value);
}
//使用增强for来遍历
for(Map.Entry<Stirng, Integer> entry : set){
//4.使用Entry对象中的getKey()方法和getValue()方法来获取键与值。
String key = entry.getkey();
Integer value = entry.getValue();
System.out.println(key + "=" + value);
}
}