Map接口和HashMap实现

发表时间:2017-05-09 12:52:31 浏览量( 26 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度

学习过程:

一、Map接口

 Map意为映射,java.util.Map接口规定了一组通过键值对(key-value)方式组织的集合,键必须是唯一的,Map的数据也是不能保证顺序的,也就是Map中数据的顺序与放置数据的先后顺序无关。,其基本的操作是get 和 put,即放置数据和取数据,我们一般是通过键key获得其对应的值value。

我们在通过键取值时,不管数据量,一般其随机访问速度都是一致的,但是如果经常需要遍历整个Map的所有数据,那么Map可能就不是最好的选择。

二、HashMap实现

HaspMap实现了Map接口,所以在键值对存储关系中,顺序是无需考虑,对象放到HashMap中,所在的位置时由哈希来分布在集合中所在的位置,取值时一般不理会这个位置,而是通过键Key去索引取得对象。跟hashSet一样,Hash序列为HashMap的基本操作(get 和 put)提供稳定的性能。

常用方法:

void clear()  //从此映射中移除所有映射关系。

boolean containsKey(Object key) //如果此映射包含对于指定键的映射关系,则返回 true。

 boolean containsValue(Object value) //如果此映射将一个或多个键映射到指定值,则返回 true。

 Set<Map.Entry

 boolean isEmpty()  //返回此映射所包含的映射关系的 Set 视图。

 V get(Object key) 如果此映射不包含键-值映射关系,则返回 true。

 Set

 V put(K key, V value) 在此映射中关联指定值与指定键。

 void putAll(Map

 V remove(Object key)  从此映射中移除指定键的映射关系(如果存在)。

 int size()  返回此映射中的键-值映射关系数。

三、示例代码

public class Stu3 {

	public static void main(String[] args) {

		HashMap map = new HashMap();

		Student stu1 = new Student();
		stu1.setNum(1);
		stu1.setName("刘德华");

		Student stu2 = new Student();
		stu2.setNum(2);
		stu2.setName("张学友");

		Student stu3 = new Student();
		stu3.setNum(3);
		stu3.setName("曾志伟");

		Student stu4 = new Student();
		stu4.setNum(3);
		stu4.setName("刘宝");

		// 添加 key=键 value=值 key唯一
		map.put("440602", stu2);
		map.put("440601", stu1);
		map.put("440603", stu3);

		map.put("440603", stu4);

		// 删
		// map.remove("440602");

		System.out.println("大小:" + map.size());

		Student stu = (Student) map.get("440601");
		System.out.println(stu.getName());

		// 遍历
		// 1、取得key。
		Set keySet = map.keySet();
		// 2、循环 迭代
		Iterator iterator = keySet.iterator();
		while (iterator.hasNext()) {
			Object object = iterator.next();
			Student student = (Student) map.get(object.toString());
			System.out.println(student.getNum() + ":" + student.getName());
		}

	}


Map的循环方式比较多,除了上面这种循环方式之外比较常用的一下四种方式:

	  //第一种:普遍使用,二次取值
	  System.out.println("通过Map.keySet遍历key和value:");
	  for (String key : map.keySet()) {
	   System.out.println("key= "+ key + " and value= " + map.get(key));
	  }
	  
	  //第二种
	  System.out.println("通过Map.entrySet使用iterator遍历key和value:");
	  Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
	  while (it.hasNext()) {
	   Map.Entry<String, String> entry = it.next();
	   System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
	  }
	  
	  //第三种:推荐,尤其是容量大时
	  System.out.println("通过Map.entrySet遍历key和value");
	  for (Map.Entry<String, String> entry : map.entrySet()) {
	   System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
	  }

	  //第四种
	  System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
	  for (String v : map.values()) {
	   System.out.println("value= " + v);
	  }
	 }

上面用到了for each循环,其中比较常用的是第三种,尤其是如果键值对都需要获取的时候,所以大家需要记忆第三种方式。