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
返回类型是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(\, \); map.put(\, \); map.put(\, \); map.put(\, \); System.out.println(map);
System.out.println(\); String value1=(String) map.get(\); System.out.println(value1);
String value2=(String) map.get(\); 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
的 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(\, \); map.put(\, \); map.put(\, \); map.put(\, \);
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集合的两种取出(遍历)方式: