Map概述
- 1、概述
Map集合基于 键(key)/值(value)映射。每个键最多只能映射一个值。键可以是任何引用数据类型的值,不可重复;值可以是任何引用数据类型的值,可以重复;键值对存放无序。 - 2、Map常用实现类:
①HashMap:允许使用 null 值和 null 键;此类不保证映射的顺序;在多线程操作下不安全
②LinkedHashMap:基于哈希表和链接列表的实现类;具有可预知的迭代顺序(双重链接表的有序性)
③Properties:Hashtable的一个子类;属性列表中每个键及其对应值都是一个字符串;在多线程操作下安全
HashMap常用方法
- 1、向HashMap中添加元素(put),注意:key不允许重复,否则覆盖已有的key对相应的值
- 2、获取key所对应的value(get)
//例1、2
import java.util.HashMap;
public class Test {
public static void main(String[] args) {
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("小明",12);
System.out.println(map.get("小明"));
map.put("小明",15);
System.out.println(map.get("小明"));
}
}
- 3、获取HashMap集合容器中有多少对key-value(size)
//例3
import java.util.HashMap;
public class Test {
public static void main(String[] args) {
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("小明",12);
System.out.println(map.size());
map.put("小强",13);
System.out.println(map.size());
}
}
- 4、清空集合(clear)
- 5、判断集合是否为空(isEmpty)
//例4、5
import java.util.HashMap;
public class Test {
public static void main(String[] args) {
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("小明",12);
System.out.println(map.isEmpty());
map.clear();
System.out.println(map.isEmpty());
}
}
- 6、删除HashMap元素,返回value(remove)
//例6
import java.util.HashMap;
import java.util.Set;
public class Test {
public static void main(String[] args) {
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("小明",12);
map.put("小强",13);
System.out.println(map.get("小明"));
System.out.println(map.remove("小明"));
System.out.println(map.size());
}
}
- 7、value值组成的集合
//例7
import java.util.HashMap;
import java.util.Collection;
public class Test {
public static void main(String[] args) {
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("小明",12);
map.put("小强",13);
Collection<Integer> con = map.values();
for (int age : con) {
System.out.println(age);
}
}
}
/*运行结果:
13
12*/
HashMap的遍历
-
1、通过key值
-
①加强循环
import java.util.HashMap;
import java.util.Set;
public class Test {
public static void main(String[] args) {
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("小明",12);
map.put("小强",13);
Set<String> set = map.keySet();//通过keySet方法,将map中的key值存入到新建集合set中
for (String key : set) {//加强循环,对set集合进行遍历
System.out.println(key+" "+map.get(key));//输出key值并输出获取value值
}
}
}
/*运行结果:
小强 13
小明 12*/
- ②iterator
import java.util.HashMap;
import java.util.Set;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("小明",12);
map.put("小强",13);
Set<String> set = map.keySet();
Iterator<String> iterator = set.iterator();//将set集合转存到iterator中
while(iterator.hasNext()) {
String key = iterator.next();
System.out.println(key+" "+map.get(key));
}
}
}
/*运行结果:
小强 13
小明 12*/
-
2、通过创建Entry对象
-
①加强循环
import java.util.HashMap;
import java.util.Set;
import java.util.Map.Entry;
public class Test {
public static void main(String[] args) {
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("小明",12);
map.put("小强",13);
Set<Entry<String, Integer>> set = map.entrySet();//将每一对键值对存入到一个Entry类的对象中,并把entry存入到set中
for (Entry<String, Integer> entry : set) {//加强循环
System.out.println(entry.getKey()+":"+entry.getValue());//通过entry调用entry类方法getKey、getValue获得key值和value值
}
}
}
/*运行结果
小强:13
小明:12*/
- ②iterator
import java.util.HashMap;
import java.util.Set;
import java.util.Map.Entry;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("小明",12);
map.put("小强",13);
Set<Entry<String, Integer>> set = map.entrySet();
Iterator<Entry<String, Integer>> iterator = set.iterator();//将Set集合中的entry转存到iterator中
while(iterator.hasNext()) {
Entry<String, Integer> entry = iterator.next();//将下一个内存中的值赋给entry
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
}
/*运行结果
小强:13
小明:12*/