Map集合是双列集合的顶层接口,下面分为TreeMap和HashMap.
那么我们先来看一下Map和collection的区别:
1.Map是双列的,而collection是单列的
2.Map的键都是唯一的,而collection中只有set集合的值是唯一的
3.Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效
(一)Map集合共性方法的使用.
1):添加功能
V put(K key,V value):添加元素。
如果该键是第一次存储的,就直接存储元素,返回null
如果该键不是第一次存储,也就是说,前面有相同的键,那么就用该键把以前的键替换掉,返回以前的值(记住是返回以前的键)
2):删除功能
void clear():移除所有的键值对元素
V remove(Object key):根据键删除键值对元素,并把值返回
3):判断功能
boolean containsKey(Object key):判断该集合是否包含指定的键
boolean containsValue(Object value):判断该集合是否包含指定的值
boolean isEmpty():判断集合是否为空
4):获取功能
Set<Map.Entry<K,V>> entrySet():
V get(Object key):根据键获取值
Set<K> keySet():获取集合中所有键的集合
集合.get(Object key):获取集合中所有值的集合
5):长度功能
int size():返回集合中的键值对的个数
(二)Map集合的遍历
在这里要说明一下,Map集合的遍历和collection的遍历是不一样的,因为Map集合是以键值对的形式存在的,下面来介绍两种遍历Map集合的方法.
1).根据键获取值
public static void main(String[] args) {
TreeMap<String, Integer> tm = new TreeMap<>();
tm.put("张三", 23);
tm.put("李四", 24);
tm.put("王五", 25);
Set<String> s = tm.keySet();//获取到集合的键
for(String str : s) {
Integer value = tm.get(str);通过get(key)获取到值
}
}
这种方式没什么难度,就是先定义泛型,然后根据keySet方法获取键,遍历集合,通过get(key)获取到值
2).根据键值对分别获取到键和值
Set<Map.Entry<String, Integer>> entry = tm.entrySet();
//开始遍历这个集合获取到键值对
for(Map.Entry<String, Integer> en : entry) {
//分别获取到键和值
String key = en.getKey();
Integer value = en.getValue();
//输出
System.out.println(key + "..." + value);
这种方法其实也并不难,就是多了一个步骤,那就是用entrySet()方法获取到集合的键值对,遍历集合,再分别用getKey(),和getValue()方法获取到键和值.
(三)Map集合的常见两个实现类.
我在这里就只提HashMap和TreeMap这两个集合,TreeList和HashList存储元素或者对象的时候需要注意哪些问题.
1,HashMap集合
HashMap键的位置存储自定义元素,想要保证键唯一,就要依赖元素所属类的hashCode() 和 equals()方法.
2,TreeMap集合
TreeMap集合键存储自定义对象,保证键唯一且实现排序:
自然顺序(存入的对象的类需要实现comparable接口)
比较器顺序(自定义比较器即可)
3,HashMap和Hashtable的区别
HashMap允许使用 null 值和 null 键。线程不同步,效率低。
Hashtable不允许使用 null 值和 null 键。线程同步,效率高。