java map
哑巴开口说话,饼上放些盐巴!
Map 特点key-value映射
HashMap Key无序唯一(Set)
Value 无序 不唯一(Collection)
LinkedHashMap
有序的 hashMap速度快
TreeMap 有序速度没有hash快
set与Map有关系:采用了相同的数据结构,只用于map的key存储是set。
map存储的是key-V键值对映射的数据
实现子类:HashMap:数组+链表(1.7),数组+链表+红黑树(1.8)
LinkedHashMap: 链表
TreeMap: 红黑树
基本API:增加:put(k,v);
查找:isEmpty返回是否为空 size 返回大小.
containsKey
containsValue
get
删除:
clear 清空集合所有元素
remove 删除指定元素
map.entry : 表示的是Key和V组合的一组映射关系,key 和 value 成组出现.
hashmap和hashtable的区别
1、hashmap线程不安全,效率比较高,hashtable线程安全,效率低
2、hashmap中key和value都可以为空,hashtable不允许为空
3、hashMap初始值为2的N次幂
1.方便进行&运算操作,提高效率,&比其他运算效率高
hash & initCapacity-1)
2.在扩容之后涉及到元素的迁移过程,迁移的时候只需要判断二进制的前一位是1或者0即可,
如果是0,元素新数组和旧数组 的下表不变,
如果是1,只需要将索引位置+旧的数组的长度值即为新数组的下标.
1.7源码知识点, 数组+链表
1、默认初始容量
2、加载因子
3、put操作,1、设置值,计算hash
2、扩容操作
3、数据迁移过程
1.8源码知识点: 数组+链表+红黑树
map的四种循环:
public static void main(String[] args) { Map<String,Integer> map = new HashMap<String,Integer>(); map.put("a",1); map.put("b",2); map.put("c",3); map.put("d",4); // System.out.println(map); //1.遍历操作 Set<String> keys = map.keySet(); for(String key:keys){ System.out.println(key +"="+map.get(key)); } //2.只能获取values值不能获取key Collection<Integer> values = map.values(); for (Integer i:values){ System.out.println(i); } //3.迭代器 Set<String> keys2 = map.keySet(); Iterator<String> iterator = keys2.iterator(); while (iterator.hasNext()){ String key = iterator.next(); System.out.println(key+"="+map.get(key)); } //4. map entry 不用根据key获取值 Set<Map.Entry<String, Integer>> entries = map.entrySet(); Iterator<Map.Entry<String, Integer>> iterator1 = entries.iterator(); while (iterator1.hasNext()){ Map.Entry<String, Integer> next = iterator1.next(); System.out.println(next.getKey()+"="+next.getValue()); } }