Java集合框架之Map详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java集合框架之Map详解
Map(映射)是一个接口,是一个键值对来进行存储的。一对一对往里内存,而且要保证键的唯一性。
Map
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0效率低
|--HashMap:底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的。
jdk1.2效率高
|--TreeMap:底层是而查实数据结构。线程不同步。可以用于给Map集合中的键进行排序,和Set很像,其实,Set底层就是使用了Map集合。
Map
HashMap是最常用的一个类,那么HashMap的最常用的方法有哪些呢?
a)放置:public V put(K key, V value):在此映射中关联指定值与指定键
b)获取:public V get(Object key):返回指定键所映射的值键的集合:public Set
c)值的集合:public Collection
我们来看看以下,这些常用方法的使用:
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class HashMapTest {
public static void main(String[] args) {
HashMap map=new HashMap();
map.put("name1", "zhangsan");
map.put("name2", "lisi");
map.put("name3", "wangwu");
map.put("name1", "zhaoliu");
System.out.println(map);
System.out.println("--------------------");
String value1=(String) map.get("name2");
System.out.println(value1);
String value2=(String) map.get("name4");
System.out.println(value2);//打印一个空
Set set=map.keySet();
for(Iterator it=set.iterator();it.hasNext();){ //遍历Map 中key的值
Object key=it.next();
System.out.println(key);
}
Collection c=map.values();
System.out.println(c);
}
}
总结:keySet()方法和values()方法,经常用来遍历map中的key和value 值
小练习:我们在命令行输入几个字符,有重复的,请使用map来记录字符出现的次数。
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class MapTest {
public static void main(String[] args) {
HashMap map = new HashMap();
for (int i = 0; i < args.length; i++) {
if(map.get(args[i]) == null) { //如果map中key没有值,则直接放进去
map.put(args[i], 1);
}else{
Integer in=(Integer) map.get(args[i]); //现将map中的值取出来
in++; //再自增1
map.put(args[i], in);
}
}
Set set=map.keySet(); //使用keySet将key放到Set集合里
for(Iterator it=set.iterator();it.hasNext();){
String key=(String) it.next();
Integer value=(Integer) map.get(key);
System.out.println(key+":"+value);
}
}
}
两种遍历Map
现在我们来看看如何遍历HashMap,遍历HashMap总共有两种方法:
第一种:使用keySet()方法和values()方法,前面一代码已演示过了
第二种,我们就要涉及到Map接口中的内部接口Map.Entry
a)Map映射视图:Set
b)获取key的集合:K getKey():返回与此项对应的键。来自于Map.Entry接口的方法
c)获取value的集合:V getValue():返回与此项对应的值,来自于Map.Entry接口的方法
现在我们来看看第二种遍历是如何实现的呢?
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class MapEntryTest {
public static void main(String[] args) {
HashMap map=new HashMap();
map.put("a", "dog");
map.put("b", "pig");
map.put("c", "flog");
map.put("d", "cow");
Set set=map.entrySet();
for(Iterator it=set.iterator();it.hasNext();){ //遍历
Map
Map.Entry entry=(Entry) it.next(); //返回给Map.Entry
String key=(String) entry.getKey();
String value=(String) entry.getValue();
System.out.println(key+":"+value);
}
}
}
总结:map集合的取出原理:将map集合转成set集合,再通过迭代器取出。
map集合的两种取出(遍历)方式: