1.Map映射关系(key,value)entry 键值对,key不重复,value可以重复,无序的。
2.实现类HashMap
- map.keySet(); 返回key的集合
- map.values(); 返回value的集合
- map.clear(); 清空所有元素
- map.remove(); 清除指定的元素
- map.size(); 键值对的个数
3.map没有迭代器,根据所有key,获得value。可以用foreach,遍历key和value
Map<String, String> map = new HashMap<>();
map.put("1", "ss");
map.put("2", "bb");
map.put("3", "vv");
//取出map里面所有键值对的方法
Set set= map.keySet();
Iterator<String> iterator=set.iterator();
while (iterator.hasNext()){
String key=iterator.next();
System.out.println(key+"="+map.get(key));
}
//取出map里面所有键值对的方法
for (String key:map.keySet()
) {
System.out.println(key+"="+map.get(key));
}
4.简单方式取出map里面所有的元素,每次put,相当于添加一个entry对象。
//获取所有的entry对象
Set<Map.Entry<String, String>> entrySet = map.entrySet();
Iterator<Map.Entry<String, String>> it = entrySet.iterator();
while (it.hasNext()) {
Map.Entry<String, String> m = it.next();
System.out.println(m.getKey() + "=" + m.getValue());
}
//获取所有的entry对象
for (Map.Entry<String, String> entry:entrySet
) {
System.out.println(entry.getKey()+"="+entry.getValue());
}
5. LinkedHashMap添加元素是有序的,HashMap是无序的。TreeMap的key会自动排序。
6.利用map实现,统计每个字符在字符串中出现的次数。
- 将字符串转成char类型的数组进行遍历
- 利用map的k-v结构。存储字符和出现的次数
- 如果不包含,value插入1 ,如果包含了更新成+1
public class TestCountCharacter {
public static void main(String[] args) {
TreeMap<Character, Integer> treeMap = new TreeMap();
String line = "aaaabbbbbdsdsdsss";
char[] chars = line.toCharArray();
for (char c : chars
) {
if (!treeMap.containsKey(c)) {
treeMap.put(c, 1);
} else {
treeMap.put(c, treeMap.get(c) + 1);
}
}
System.out.println("treeMap = " + treeMap);
}
}
7.HashMap和HashTable的区别(共同点底层都是hash算法,双列集合)
- HashMap是线程不安全的,key和value都可以是null,
- HashTable线程安全,效率不高的,不能存储null值
8.HashMap、Hashtable、ConccurentHashMap三者的区别
- HashMap线程不安全,数组+链表+红黑树
- Hashtable线程安全,锁住整个对象,数组+链表
- ConccurentHashMap线程安全,CAS+同步锁,数组+链表+红黑树
- HashMap的key,value均可为null,其他两个不行。
参考: