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);
}
方法二
- 通过map中的方法entrySet()获取键值对的Set集合
- 遍历Set集合中的每一键值对,
- 通过键值对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>)