关于map集合及其三种遍历方式

Map集合:一组成对的“键值对”对象。Collection和Map的区别在于容器中每个位置保存的元素个数。Collection每个位置只能保存一个元素或者对象 。此类容器包括List以特定的顺序保存一组元素,Set则是元素不能重复。

Map保存的“键值对”就像一个小型数据库:可以通过”键“找到对应的”值“!例如:我们平时可以根据学号找到与之对应的学生的信息。

Map接口用于保存关键字(Key)和数值(value)的集合。集合中的每个对象加入时都提供数值和关键字。Map接口既不继承Set也不能继承Collection。而是从自己的用于维护键——值关联的接口层次结构入手。

一般使用compareTo或者compare方法对键进行排序。它有三个实现:HashMap、TreeMap、LinkedHashMap。其中,HashMap能满足用户通用的对Map的需求,TreeMap支持对键有序的遍历,使用时建议先用HashMap增加和删除成员,再用HashMap生成TreeMap,同时附加实现了SortedMap接口,支持子Map等要求顺序的操作。而LinkedHashMap保留键的插入顺序,用equals方法检查键和值的相等性。我们还是使用HashMap比较多的。


Map接口中定义的常用方法:

(1)void  clear():删除该Map对象中所有的键值对。

(2)boolean  containsKey(Object key):查询Map中是否包含指定key。

(3)boolean  containsValue(Object value):查询Map中是否包含一个或多个value。

(4)Set  entrySet():返回Map中所包含的键值对所组成的Set集合,每个集合元素都是Map.Entry对象。

(5)Object  get(Object obj):返回指定key所对应的value。如果没有,这返回null。

(6)boolean  isEmpty():查询该Map是否为空,如果为空则返回true。

(7)Set  keySet():返回该Map中所有key组成的Set集合。

(8)Object  put(Object key, Object value):添加一个键值对,如果当前Map中已经有一个与该key相等的键值对,则新的键值对将覆盖原来的键值对。

(9)void  putAll(Map  m):将指定Map中的键值对复制到m中。

(10)Object  remove(Object  key):删除指定key所对应的键值对,如果不存在,则返回null。

(11)int   size():返回Map里的键值对个数。

(12)Collection  values():返回该Map里所有的vlaue组成的Collection。

那么如何对其进行遍历呢?下面就直接写代码展示,比较直观。

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class MapBianLi {

	public static void main(String[] args) {
		HashMap map=new HashMap();
		map.put(1, new Student("aaa", 18));
		map.put(2, new Student("bbb", 17));
		map.put(3, new Student("ccc", 16));
		map.put(3, new Student("ccc", 16));
		//map.put(null, null);  map.put允许空值
		System.out.println(map.size());//3,因为key值相同,所以就认为是同一组元素
		System.out.println("========================");
		/**
		 * 1.Key遍历:
		 * 通过key获取value
		 * Set set=map.keySet();获取当前map的key集合
		 * 遍历set集合,通过map.get()获得相对于的value
		 */
		Set set=map.keySet();
		Iterator it=set.iterator();
		while(it.hasNext()){
			int key=(int)it.next();//你的map中的key值是什么类型,这里的变量就要是什么类型,对it.next进行强转,下面也一样
			Student values=(Student)map.get(key);
			System.out.println("key:"+key+",values:"+values);
		}
		
	System.out.println("*************************");
	//2.通过values获得map的值集
	Collection value=map.values();
	Iterator it1=value.iterator();
	while(it1.hasNext()){
		System.out.println(it1.next());
		}
	//3.通过entrySet遍历
	System.out.println("+++++++++++++++++++++++++");
	Set entrySet=map.entrySet();
	Iterator it2= entrySet.iterator();
	while(it2.hasNext()){
		Entry entry=(Entry)it2.next();
		Student values1=(Student)entry.getValue();
		int key1=(int)entry.getKey();
		System.out.println("key:"+key1+",values:"+values1);
	}
	}
}



猜你喜欢

转载自blog.csdn.net/loveliness_peri/article/details/80159381