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接口的遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | 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()); } } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南