Map集合

1.Map是一种依照键(key)存储元素的容器,键(key)很像下标,在List中下标是整数。在Map中键(key)可以使任意类型的对象。Map中不能有重复的键(Key),每个键(key)都有一个对应的值(value)。Map中的元素是两个对象,一个对象作为键,一个对象作为值。键不可以重复,但是值可以重复。

>保证键的唯一性->Set,值可以重复->Collection

2.Map下的接口:

>Hsahtable:底层是哈希表数据结构,是线性同步,不允许存储null键和值。

>HashMap:底层是哈希表数据结构,线性不同步,允许储存null键和值。

>LinkedHashMap:该子类基于哈希表又融入了链表。可以Map集合进行增删提高效率。

>TreeMap:底层是二叉树结构,线性不同步,可以对map集合中的键进行指定顺序排序。

补充:HashSet,TreeSet的底层是用HashMap,TreeMap实现的,只操作键,就是Set集合

3.Map和Collection的不同:

>Collection一次存一个元素,Map一次存一对元素。

>Map存储元素使用put方法,Collection使用add方法

>Collection是单列集合, Map 是双列集合。

>Map 一次存入一对元素,是以键值对的形式存在.键与值存在映射关系.一定要保证键的唯一性.

4.Map集合的方法:

>v put(key,value):当存储的键相同时,新的键会替换老的键,并将老键返回。如果键没有重复,返回null。

>putAll(Map<? extends K,? extends V> m)  从指定映射中将所有映射关系复制到此映射中。

>remove()    删除关联对象,指定key对象

>clear()     清空集合对象

>value get(key); 可以用于判断键是否存在的情况。当指定的键不存在的时候,返回的是null。

>boolean isEmpty()   长度为0返回true否则false

>boolean containsKey(Object key)  判断集合中是否包含指定的key

>boolean containsValue(Object value)  判断集合中是否包含指定的value

>int size():返回长度。

例:

import java.util.HashMap;
import java.util.Map;
public class TestHashMap {
	public static void main(String[] args) {
	Map<Integer,String>  map=new HashMap<Integer,String> ();
	map.put(1, "dog");     //put写入元素
	map.put(2, "cat");
	map.put(3, "munt");
	map.put(4, "hash");
	System.out.println("获取第二个键的值"+map.get(2));  //指定键获得对应的值
	System.out.println("是否包含第二个键:"+map.containsKey(3)); //判断是否包含key
	System.out.println("是否包含dog这个值:"+map.containsValue("dog")); //是否包含指定值
	System.out.println("map的长度为:"+map.size());    //返回长度
	System.out.println("移除第二个键并返回这个键对应的值:"+map.remove(2)); //删除指定键,长度改变
	map.clear();             //清空map
	System.out.println("清空后的集合:"+map); 
}
}

运行结果:

获取第二个键的值cat
是否包含第二个键:true
是否包含dog这个值:true
map的长度为:4
移除第二个键并返回这个键对应的值:cat
清空后的集合:{}

5.如何获取Map中元素:

    原理:Map中没有迭代器的,Collection具备迭代器,只要将map转成Set集合,就可以使用迭代器。之所以转成Set,是因为Map集合具有的键的唯一性,Set就是来自于Map,Set的底层就是Map方法。

有两种方法:

>Set keySet();将map集合的键都取出来放到Set集合中。对Set集合进行迭代。迭代完成再通过get方法对获取的键进行值的获取。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class TestKeyset {
	public static void main(String[] args) {
		Map<String,String>  map=new HashMap<String,String> ();
		map.put("a", "dog");     //put写入元素
		map.put("b", "cat");
		map.put("c", "munt");
		map.put("d", "hash");
		Set<String> k=map.keySet();
		Iterator<String> i=k.iterator();
		while(i.hasNext()) {
			String key=i.next();
			String value=map.get(key);
			System.out.println(key+":"+value);
		}
	}
}

运行结果:

a:dog
b:cat
c:munt
d:hash

>Set entrySet();取的是键和值的映射关系。Map.Entry:其实就是一个Map中的内部接口。

为什么定义在map的内部?entry是键值关系的入口,是map的入口,访问的map中的键值对。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class TestentrySet {
	public static void main(String[] args) {
		Map<String,String>  map=new HashMap<String,String> ();
		map.put("a", "dog");     //put写入元素
		map.put("b", "cat");
		map.put("c", "munt");
		map.put("d", "hash");
		Set<Entry<String, String>> k=map.entrySet();
		Iterator<Entry<String, String>> i=k.iterator();
		while(i.hasNext()) {
			Entry<String, String> key=i.next();
			System.out.println(key.getKey()+":"+key.getValue());
		}
	}
}

运行结果:

a:dog
b:cat
c:munt
d:hash


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值