java中的Map接口(Hashtable ,properties ,HashMap , LinkedHashMap , TreeMap)
Map接口的特点
- Map用于保存具有映射关系的数据:key,Value
- 补充:Collection接口 也是有映射关系的,底层Value 让一个static Object类的方法代替了
- Map中的key不允许重复,和HashSet一样,Value可以相同
- Map中的Key和Value可以是引用数据类型
- 在添加的时候,如果HashMap中,已经有Key值相同的元素,会替换掉旧的,用新的(value被替换)
- HashMap.get()传入一个Key可以得到Value,因为Key没有重复
- HashMao是没有实现线程同步的,因此是线程不安全的
HashMap底层分析(可以看我前面分析的HashSet)
Hashtable
- Hashtable的键和值都不能为null
- Hashtable是线程安全的
- 扩容机制:(当前大小不 * 2+1)一开始是11个空间,当到达11*0.75 = 8个时,就会扩容到23个(11 * 2 + 1)
Hashtable和HashMap比较
proprites
开发中如何选择集合
Map接口的遍历
import java.util.*; public class text { public static void main(String[] args) { HashMap hm = new HashMap<>(); hm.put(1, "平凡晨"); hm.put(2, "库里"); hm.put(3, "霍华德"); hm.put(null, "科比"); hm.put(4, "詹姆斯"); hm.put(5, "tom"); hm.put(6, "jack"); //得到所有的key Set<Object> ks = hm.keySet(); System.out.println("=======第一种方式======="); //第一种方式 增强for循环 遍历key for (Object key : ks) { System.out.println(key); } System.out.println("=======第二种方式======="); //第二种方式 通过迭代器 遍历key的值 Iterator<Object> iterator = ks.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } System.out.println("=======第三种方式======="); //第三种方式 取出所有 key 和 value for (Object key : ks) { System.out.println(key + " " + hm.get(key)); } System.out.println("=======第四种方式======="); //第四种方式 通过迭代器 遍历key 和value Iterator<Object> iterator1 = ks.iterator(); while (iterator1.hasNext()) { Object next = iterator1.next(); System.out.println(next + " " + hm.get(next)); } //得到所有的value Collection values = hm.values(); System.out.println("=======第五种方式======="); Iterator iterator2 = values.iterator(); while (iterator2.hasNext()) { System.out.println(iterator2.next()); } // 通过 EntrySet 来获取 k-v Set set = hm.entrySet(); System.out.println(set); System.out.println("=======第六种方式======="); Iterator iterator3 = set.iterator(); while (iterator3.hasNext()) { Object next = iterator3.next();//HashMap$Node -实现-> Map.Entry (getKey,getValue) //向下转型 Map.Entry m = (Map.Entry)next; System.out.println(m.getKey() + "-" + m.getValue()); } System.out.println("=======第七种方式======="); for(Object s :set){ Map.Entry m = (Map.Entry) s; System.out.println( m.getKey() +"-"+ m.getValue()); } } }