Java集合框架之Map详解

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 keySet():Map的keySet()方法会返回key的集合,因为Map的键是不能重复的,因此ksySet()方法的返回类型是set。

c) 值的集合:public Collection values():Map的值是可以重复的。因此value()方法的

返回类型是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> entrySet():返回此映射中包含的映射关系

的 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集合的两种取出(遍历)方式:

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4