Java基础——常用对象API(四)Map集合

一、集合特点和常用方法

1.特点

一次添加一对元素,因此也称作双列集合。(相较下,Set称为单列集合)

要保证键的唯一性。

2.功能

2.1.添加

value put(key,value);//返回前一个和key关联的值,如果没有返回null。

2.2.删除

void  clear();//清空map集合。
value remove(key);//根据指定的key翻出这个键值对。

2.3.判断

boolean containsKey(key):
boolean containsValue(value):
boolean isEmpty();

 2.4.获取

value get(key);//通过键获取值,如果没有该键返回null。
                    //注:当然可以通过返回null,来判断是否包含指定键。 
int size(); //获取键值对的个数。

 使用的小例子,里面大注释的代码也可以用来试一下:

public class MapDemo {

	public static void main(String[] args) {
		
		Map<Integer,String> map = new HashMap<Integer,String>();
		method_2(map);
	}
	
	public static void method_2(Map<Integer,String> map){
		map.put(8,"zhaoliu");
		map.put(2,"zhaoliu");
		map.put(7,"xiaoqiang");
		map.put(6,"wangcai");
		
		Collection<String> values = map.values();
		
		Iterator<String> it2 = values.iterator();
		while(it2.hasNext()){
			System.out.println(it2.next());
		}
		
		/*
		 * 通过Map转成set就可以迭代。
		 * 找到了另一个方法。entrySet。
		 * 该方法将键和值的映射关系作为对象存储到了Set集合中,而这个映射关系的类型就是Map.Entry类型(结婚证)
		 * 
		 * 
		 */
		Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
		
		Iterator<Map.Entry<Integer, String>> it = entrySet.iterator();
		
		while(it.hasNext()){
			Map.Entry<Integer, String> me = it.next();
			Integer key = me.getKey();
			String value = me.getValue();
			System.out.println(key+"::::"+value);
			
		}
		
		//取出map中的所有元素。
		//原理,通过keySet方法获取map中所有的键所在的Set集合,在通过Set的迭代器获取到每一个键,
		//在对每一个键通过map集合的get方法获取其对应的值即可。
		/*
		Set<Integer> keySet = map.keySet();
		Iterator<Integer> it = keySet.iterator();
		
		while(it.hasNext()){
			Integer key = it.next();
			String value = map.get(key);
			System.out.println(key+":"+value);
			
		}
		*/
	}
	
	public static void method(Map<Integer,String> map){//学号和姓名
		// 添加元素。
		System.out.println(map.put(8, "wangcai"));//null
		System.out.println(map.put(8, "xiaoqiang"));//wangcai 存相同键,值会覆盖。
		map.put(2,"zhangsan");
		map.put(7,"zhaoliu");
		
		//删除。
//		System.out.println("remove:"+map.remove(2));
		
		//判断。
//		System.out.println("containskey:"+map.containsKey(7));
		
		//获取。 
		System.out.println("get:"+map.get(6));
		System.out.println(map);
		Outer.Inner.show();
	}
	
}

接着说方法:

2.5.利用keySet遍历

//取出map中的所有元素。
//原理,通过keySet方法获取map中所有的键所在的Set集合,再通过Set的迭代器获取到每一个键,
//再对每一个键通过map集合的get方法获取其对应的值即可。

Set<Integer> keySet = map.keySet();//获取键的集合
Iterator<Integer> it = keySet.iterator();//获取集合迭代器
//遍历
while(it.hasNext()){
	Integer key = it.next();
	String value = map.get(key);
	System.out.println(key+":"+value);
}

2.6.利用entrySet遍历

//该方法将键和值的映射关系作为对象存储到了Set集合中,而这个映射关系的类型就是Map.Entry类型(结婚证)

Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
Iterator<Map.Entry<Integer, String>> it = entrySet.iterator();
while(it.hasNext()){
	Map.Entry<Integer, String> me = it.next();
	Integer key = me.getKey();
	String value = me.getValue();
	System.out.println(key+"::::"+value);
}

2.7.values来遍历

Collection<String> values = map.values();
		
Iterator<String> it2 = values.iterator();
while(it2.hasNext()){
	System.out.println(it2.next());
}

2.8.用forEach(BiConsumer<? super K,? super V> action)来遍历(2019-1-12 00:11:45更新)

这应该是最简单高效的一个方法:

map.forEach((k, v)->{
    System.out.println(v);
});

二、Map常见子类

1.Hashtable

内部结构是哈希表,是同步的。不允许null作为键,null作为值。

他有个小弟叫做Properties,用来存储键值对型的配置文件的信息。可以和IO技术相结合发挥最大作用。

2.HashMap

内部结构是哈希表不是同步的。允许null作为键,null作为值。

3.TreeMap

内部结构是二叉树不是同步的。可以对Map集合中的键进行排序。 

使用小例子:

        public static void main(String[] args) {

		
		/*
		 * 将学生对象和学生的归属地通过键与值存储到map集合中。
		 * 
		 */
		
		HashMap<Student,String> hm = new HashMap<Student,String>();//student是个外部类

		
		hm.put(new Student("lisi",38),"北京");
		hm.put(new Student("zhaoliu",24),"上海");
		hm.put(new Student("xiaoqiang",31),"沈阳");
		hm.put(new Student("wangcai",28),"大连");
		hm.put(new Student("zhaoliu",24),"铁岭");//student判断相同需要覆写hashCode和equals方法
		
//		Set<Student> keySet = hm.keySet();		
//		Iterator<Student> it = keySet.iterator();
		
		Iterator<Student> it = hm.keySet().iterator();
		
		while(it.hasNext()){
			Student key = it.next();
			String value = hm.get(key);
			System.out.println(key.getName()+":"+key.getAge()+"---"+value);
		}
		
		
	}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值