Map集合的概述

Set的底层就是由Map集合构成的
Set集合存放的元素就是Map的Key键,Value值为Object类
方法
//插入
V put(K key,V value);		//返回的是未覆盖前的value,如果没有就返回null
//删除
void clear();
v remove(K key);			//根据键,删除元素,返回的是删除前的value
//判断
boolean containsValue(Object v);		//判断是否包含传入的值
boolean containsKey(Object k);			//判断是否包含传入的键
//获取
Collection<V> values();					//获取集合中所有的值
V get(Object key);						//根据键获取值
//长度
int size();
遍历

Map集合无法用迭代器iterator直接迭代,

方法一

用keySet()的Iterator加上Map的get()方法.

Set<String> keyset = map.keySet();		// 获取所有键的集合
		Iterator<String> it = keyset.iterator();
		while (it.hasNext()) {					//判断集合中是否有元素
			String key = it.next();				//获取每一个键
			Integer value = map.get(key);			//通过键来获取值
			System.out.println(key + "=" + value);

增强for循环(feach)

for (String key : map.keySet()) {
	Integer value = map.get(key);
	System.out.println(key +"=" +value);
}
方法二
  1. 通过map中的方法entrySet()获取键值对的Set集合
  2. 遍历Set集合中的每一键值对,
  3. 通过键值对Map.Entry的方法getKey()和getValue()来遍历
//Map.Entry是Map接口中的内部接口,将键值封装成了Entry对象,并存储在Set集合中
Set<Map.Entry<String, Integer>> entry = map.entrySet();
//获取每一个Entry对象
Iterator<Map.Entry<String, Integer>> it = entry.iterator();
while (it.hasNext()) {
	Map.Entry<String, Integer> entry1 = it.next();
	//获取单个Entry对象中的键和值
	String key = entry1.getKey();
	int value = entry1.getValue();
	System.out.println(key + "=" + value);
}

foreach:

Set<Map.Entry<String, Integer>> entry = map.entrySet();
for(Map.Entry en : entry) {
	System.out.println(en.getKey()+"="+en.getValue());
}

p.s
Map.Entry是接口Map中的内部接口Entry,而HashMap中有实现Map.Entry的Entry类,直接调用即可

hashMap

K类必须是重写了Hash Code()方法和equals()方法

LinkedHashMap

存取顺序相同的HashMap集合,其他和HashMap相同,不能存相同的key

TreeMap

!!!K类必须实现Comparable接口并且重写Compare()方法,否侧会出现ClassCastException类型转换异常
或者使用比较器Comparator

HashMap&Hashtable(小写)

类似于ArrayList和Vector之间的关系

区别(面试题)

共同点
底层都是Hash算法,都是双列集合
区别

HashMap

Hash table

线程不安全的,效率高,JDK1.2版本

线程安全,效率低,JDK1.0

可以存储Null键和null值

不可以存储null键值

Collections类

静态操作类,构造方法私有,直接Collections.method()调用,不需要实例

<T> void sort(List<T> list);		//将List排序
<T> int binarySearch(List<?> list,T key);	//二分查找法,若有返回索引,若无返回-(插入点)-1
<T> T max(Collection<?> coll);		//获取集合元素最大值
void reverse(List<?> coll);
void shuffle(List<?> list);

? super E 泛型固定下边界

拿出来到比较器(例如)进行比较
Comparator<? super E>{}

? extends E 泛型固定上边界

放到定义为父类的集合中去,相当于父类引用指向子类对象
addAll(Collection<? extends E>)