`
airfly2013
  • 浏览: 18706 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员 java_Map

 
阅读更多
                     ------- android培训java培训、期待与您交流! ----------
 
 
Map集合
 
Map与Collection的关系

Map与Collection在集合框架中属并列存在
Map存储的是键值对
Map存储元素使用put方法,Collection使用add方法
Map集合没有直接取出元素的方法,而是先转成Set集合,在通过迭代获取元素
Map集合中键要保证唯一性


Map体系结构

Map和Set很像,Set底层就是使用了Map集合。Set中元素就想当与Map的key。
该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
Map有三个子类。
        |--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。                                   此集合在jdk1.0时就存在,效率低。
        |--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。                               它将hashtable替代,jdk1.2时出现,效率高。
         |--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排                                序。


Map中的方法

1,添加
put(K key, V value) 新加入一对键值
putAll(Map<? extends K,? extends V> m) 
此处用到泛型,意思是将一个Map集合加入到调用此方法的Map集合。这个新加入的Map集合
的键和值都是调用者的子类。

2,删除
clear() 删除所有键值对,
remove(Object key) 移除指定的键值对

3,判断
containsValue(Object value) 判断是否存在指定值的键值对。
containsKey(Object key)   判断是否存在指定键的键值对。
isEmpty() 判断是否为空


4,获取
get(Object key) 通过键获取值
size() 
values() 返回值的集合。
entrySet() 返回一个Set,其中元素为一个键值对,在api中用Map.Entry表示
keySet() 返回一个Set,其中元素是Map的key
Map<String,String> map = new HashMap<String,String>();

		//添加元素,添加元素,如果出现添加时,相同的键。那么后添加的值会覆盖原有键对应值。
		//并put方法会返回被覆盖的值。
		System.out.println("put:"+map.put("01","zhangsan1"));
		System.out.println("put:"+map.put("01","wnagwu"));
		map.put("02","zhangsan2");
		map.put("03","zhangsan3");

		System.out.println("containsKey:"+map.containsKey("022"));
		//System.out.println("remove:"+map.remove("02"));

		System.out.println("get:"+map.get("023"));

		map.put("04",null);
		System.out.println("get:"+map.get("04"));
		//可以通过get方法的返回值来判断一个键是否存在。通过返回null来判断。


		
		//获取map集合中所有的值。
		Collection<String> coll = map.values();

		System.out.println(coll);
		System.out.println(map);
 


如果要遍历Map中的元素,有两种思路
由于Map中没有迭代器,也没有List中的角标,所以不能直接便利。可以根据Map与Set的关系,通过Set来间接便利。

第一种,因为Set中的元素相当于Map的键,所以可以通过keySet方法可以将Map中的键提取,放到一个Set集合中,然后通过遍历Set中的元素,并通过此元素调用Map的getValue方法获取Map的值,达到遍历Map的目的。

第二种,将Map中的一个键值对看做一个整体,通过entrySet方法将其当做Set中的一个元素,在api将其表示为Map.Entry。这样遍历Set集合时,每次获取一个Map.Entry,然后通过调用getKey和getValue方法,取得键和值。
Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口。之所以定义在Map内部,是因为只有键值对存在于Map集合内部,Map最清楚键值结构,并且能提供相关操作。
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
class  MapDemo
{
	public static void main(String[] args) 
	{
		Map<String,String> map = new HashMap<String,String>();

		//添加元素,添加元素,如果出现添加时,相同的键。那么后添加的值会覆盖原有键对应值。
		//并put方法会返回被覆盖的值。
		System.out.println("put:"+map.put("01","zhangsan1"));
		System.out.println("put:"+map.put("01","wnagwu"));
		map.put("02","zhangsan2");
		map.put("03","zhangsan3");

		System.out.println("containsKey:"+map.containsKey("022"));
		//System.out.println("remove:"+map.remove("02"));

		System.out.println("get:"+map.get("023"));

		map.put("04",null);
		System.out.println("get:"+map.get("04"));
		//可以通过get方法的返回值来判断一个键是否存在。通过返回null来判断。


		
		//获取map集合中所有的值。
		Collection<String> coll = map.values();

		System.out.println(coll);
		System.out.println(map);


	}
}
 
import java.util.*;


class MapDemo2 
{
	public static void main(String[] args) 
	{
		Map<String,String> map = new HashMap<String,String>();

		map.put("02","zhangsan2");
		map.put("03","zhangsan3");
		map.put("01","zhangsan1");
		map.put("04","zhangsan4");

		//将Map集合中的映射关系取出。存入到Set集合中。
		Set<Map.Entry<String,String>> entrySet = map.entrySet();

		Iterator<Map.Entry<String,String>> it = entrySet.iterator();

		while(it.hasNext())
		{
			Map.Entry<String,String> me = it.next();
			String key = me.getKey();
			String value = me.getValue();

			System.out.println(key+":"+value);

		}

		/*
		//先获取map集合的所有键的Set集合,keySet();
		Set<String> keySet = map.keySet();

		//有了Set集合。就可以获取其迭代器。
		Iterator<String> it = keySet.iterator();

		while(it.hasNext())
		{
			String key = it.next();
			//有了键可以通过map集合的get方法获取其对应的值。
			String value  = map.get(key);
			System.out.println("key:"+key+",value:"+value);
		}

		*/

	}
}

 
 
                       ------- android培训java培训、期待与您交流! ----------
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics