当前位置: 首页 > news >正文

Java重修笔记 第四十六天 Map 接口、HashMap 类

  • Map 接口

1. 用于保存具有映射关系的数据:Key-Value(双列元素)

2. Map 中的 key 和 value 可以是任何引用类型的数据,会封装到 HashMap$Node 对象中

3. Map 中的 key 不允许重复,原因和 HashSet 一样,value 可以重复

4. 添加重复的 key ,会导致 value 的值被替换

5. HashMap 的 key 和 value 都可以传入 Object 类型的数据, 但常用 String 类型的数据来当做 key

6.  Key-Value 是放在 HashMap$Node 中的,又因为 Node 类实现了 Map.Entry 接口,所以有些书上也说 一对 Key-Value 就是一个 Entry 结点

7. HashMap将所有 Node 结点全部封装到 EntrySet 的内部类里,方便遍历(KeySet 和 Values同理,不过一个分装 key 集合,一个分装 value 集合)

  • HashMap 接口的方法

1. public V put(K key, V value)

        添加一组新的键值对,如果 key 的值冲突,则会将就得 value 值替换为新的 value 值

2. public V remove(Object key)

        通过 key 的值删除该键值对

3. public V get(Object key)

        根据 key 获取 value

4. public int size()

        获取键值对数量

5. public boolean isEmpty()

        判断该集合键值对的数量是否为零

6. public void clear()

        将所有键值对全部删除

7. public boolean containsKey(Object key)

        查找包含 key 的键值对是否存在

8. public boolean containsValue(Object value)

        查找包含 value 的键值对是否存在

  • HashMap 的遍历方式

1. 增强for循环取出所有的 key ,再通过 key 取 value 

System.out.println("-----第一种方式-----");
Set<Integer> keySet = hashMap.keySet();
for (Object i :keySet) {System.out.println(i + " - " + hashMap.get(i));
}

2.  通过迭代器获取 key 和 value

System.out.println("-----第二种方式-----");
Iterator<Integer> iterator = keySet.iterator();
while (iterator.hasNext()) {Integer next = iterator.next();System.out.print(next + " - " + hashMap.get(next) + "\t");
}

3. 增强for循环取出 value

System.out.println("-----第三种方式-----");
Collection<Integer> values = hashMap.values();
for (Object i :values) {System.out.print(hashMap.get(i) + "\t");
}

4.  通过迭代器获取 value

System.out.println("-----第四种方式-----");
Iterator<Integer> iterator1 = values.iterator();
while (iterator1.hasNext()) {Integer next = iterator1.next();System.out.print(next + "\t");
}

5. 增强for循环使用 EntrySet 获取键值对

System.out.println("-----第五种方式-----");
Set<Map.Entry<Integer, Integer>> entries = hashMap.entrySet();
for (Map.Entry m :entries) {System.out.print(m.getKey() + " - " + m.getValue() + "\t");
}

6. 通过迭代器使用 EntrySet 获取键值对

Iterator<Map.Entry<Integer, Integer>> iterator2 = entries.iterator();
while (iterator2.hasNext()) {Map.Entry<Integer, Integer> next = iterator2.next();System.out.print(next.getKey() + " - " + next.getValue() + "\t");
}

  • HashMap 小结

1.  Map接口的常用实现类:HashMap、Hashtable 和 Properties

2. HashMap是 Map 接口使用频率最高的实现类

3. HashMap 是以 key-val 对的方式来存储数据(HashMap$Node 类型)

4. key 不能重复,但是值可以重复,允许使用 null 键和 null 值

5. 如果添加相同的 key , 则会覆盖原来的 key-val ,等同于修改(key不会替换, val会替换)

6. 与 HashSet 一样,不保证映射的顺序,因为底层是以 hash 表的方式来存储的

7. HashMap 没有实现同步,因此是线程不安全


http://www.mrgr.cn/news/19730.html

相关文章:

  • 硬件工程师笔试面试知识器件篇——三极管
  • 2024年百度嵌入式面试题及参考答案(7万字长文)
  • C++中STL容器
  • 【YOLOv8系列】YOLOv8的GUI界面设计;在电脑本地实现YOLOv8的可视化交互界面设计(对摄像头的实时画面进行分类)
  • Ajax是什么?如何在HTML5中使用Ajax?
  • 提升多跳问答中的语言模型知识编辑能力
  • 828华为云征文|华为云Flexus X实例部署k3s与kuboard图形化管理工具
  • SD-WAN组网:定义与部署步骤解析
  • Visual Studio+Qt配置开发环境
  • 【进阶】面向对象之继承(二)
  • 使用 VS Code 正则表达式批量替换:将 `this.xxx` 改为 `xxx.value`
  • 函数返回局部变量相关
  • 从0到1用Docker+Jmeter+InfluxDB+Grafana 搭建性能监控平台【保姆级教程】
  • 网络编程 0904作业
  • 深入理解区间调度问题:从贪心算法到动态规划的加权优化
  • <数据集>安全背心识别数据集<目标检测>
  • 2.门锁_STM32_舵机设备实现
  • el-upload上传文件修改 File 中的name
  • 383. 赎金信
  • 应该怎么从0搭建一个图像识别系统,如果想考计算机的研究生应该如何准备