Java——集合中的Map接口通过HashMap类实现一些常用的方法

简介: Java——集合中的Map接口通过HashMap类实现一些常用的方法

任何复杂的知识往往给人的感觉都是那么的不友好,所以,一定要静下心来,耐心去看、去读、去理解这些东西!!!  


1.Map接口简介


说明:Map接口是一种双列集合,它的每个元素都包含一个键对象 Key 和值对象 Value,键和值对象之间存在一种对应关系,称为映射。 那什么是映射呢?在生活中,我们常常会看到这样的一种集合:账号——密码、IP地址——主机名、系统用户名——系统用户对象等。像这种一一对应的关系,就叫做映射。


特点:①Map集合是一个双列集合,一个元素包含两个值(一个key,一个value)。


          ②Map集合中的元素,key 和 value 的数据类型可以相同,也可以不同。


          ③Map集合中的元素,key 是不允许重复的, value 是可以重复的。


          ④Map集合中的元素,key 和 value是一一对应的。



2.HashMap类简介


说明:HashMap 是 Map 接口的一个实现类,它用于存储键值映射关系,该集合的键和值允许为空,但键不能重复,且集合中的元素是无序的。


特点:HashMap 底层是由哈希表结构组成的,其实就是“数组+链表”的组合体,数组是 HashMap 的主体结构,链表则主要是为了解决哈希值冲突而存在的分支结构。正因为这样特殊的存储结构,HashMap 集合对于元素的增、删、改、查操作表现出的效率都比较高。


2.1 内部结构  



2.2 存储原理


 

3.Map接口常用的方法



4.应用举例

import java.util.*;
/*import java.util.Map;
  import java.util.HashMap;
  import java.util.Collection;
  import java.util.Set;
  import java.util.Iterator;*/
public class MapDemo {
  public static void main(String[] args) {
    //用多态的形式,创建一个hashmap集合,集合长度为16
    Map<String,String> hashmap=new HashMap<String,String>(16);
    System.out.println("↓↓↓Map集合常用方法如下↓↓↓");
    System.out.println("---------------------------------------------");
    System.out.println("创建第一个空的hashmap集合,键、值类型均为String类:" + hashmap);
    System.out.println("---------------------------------------------");
    hashmap.put("公共的","public");
    hashmap.put("受保护的","protected");
    hashmap.put("默认的","friendly");
    hashmap.put("默认的","default");//覆盖这个键之前对应的值
    hashmap.put("私有的","private");
    System.out.println("向hashmap集合中添加键值对元素:" + hashmap);
    System.out.println("此时hashmap集合中键值对的个数为:" + hashmap.size());
    System.out.println("---------------------------------------------");
    System.out.println("获取hashmap集合中键\"公共的\"所映射的值:" + hashmap.get("公共的"));
    System.out.println("---------------------------------------------");
    System.out.println("查看hashmap集合中是否存在键对象\"私有的\":" + hashmap.containsKey("私有的"));
    System.out.println("查看hashmap集合中是否存在值对象\"protected\":" + hashmap.containsValue("protected"));
    System.out.println("---------------------------------------------");
    String str1=hashmap.remove("默认的");
    System.out.println("将指定的键所对应的键值对元素移除,并返回该元素的值:" + str1);
    System.out.println("移除之后,hashmap集合为:" + hashmap);
    System.out.println("---------------------------------------------");
    Set<String> set=hashmap.keySet();
    System.out.println("以Set集合的形式返回hashmap集合中所有的键对象:" + set);
    System.out.println("---------------------------------------------");
    Collection<String> collection=hashmap.values();
    System.out.println("以Collection集合的形式返回hashmap集合中所有的值对象:" + collection);
    System.out.println("---------------------------------------------");
    Set<Map.Entry<String,String>> setmap=hashmap.entrySet();
    System.out.println("将hashmap集合转换为存储元素类型为Map的Set集合:" + setmap);
    System.out.println("---------------------------------------------");
    System.out.println("Iterator迭代器遍历Map集合——keySet()方法:");
    Set<String> setkey1=hashmap.keySet();//以Set集合的形式返回hashmap集合中所有的键对象
    Iterator<String> iterator1=setkey1.iterator();//获取Set集合的迭代器对象,并遍历该迭代器对象
    while(iterator1.hasNext()) {
      Object key1=iterator1.next();//获取键
      Object value1=hashmap.get(key1);//通过键获取相应的值
      System.out.println("键:" + key1 + ",值:" + value1);
    }
    System.out.println("---------------------------------------------");
    System.out.println("Iterator迭代器遍历Map集合——entrySet()方法:");
    Set<Map.Entry<String,String>> setkey2=hashmap.entrySet();//将hashmap集合转换为存储元素类型为Map的Set集合
    Iterator<Map.Entry<String,String>> iterator2=setkey2.iterator();//获取Set集合的迭代器对象,并遍历该迭代器对象
    while(iterator2.hasNext()) {
      //通过Entry对象的getKey()和getValue()方法,获取键和值
      Map.Entry<String,String> kv=iterator2.next();
      Object key2=kv.getKey();
      Object value2=kv.getValue();
      System.out.println("键:" + key2 + ",值:" + value2);
    }
    System.out.println("---------------------------------------------");
    System.out.println("使用Lambda表达式的书写形式来遍历Map集合:");
    //JDK 8新方法遍历Map集合(Lambda表达式特性),这里也可以使用for-each循环对hashmap集合进行遍历
    hashmap.forEach((key,value)->System.out.println("键:" + key + ",值:" + value));
    System.out.println("---------------------------------------------");
    hashmap.clear();
    System.out.println("清空hashmap集合中的所有键值对元素:" + hashmap);
    System.out.println("---------------------------------------------");
  }
}


相关文章
|
17天前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
16天前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
5天前
|
存储 分布式计算 Java
Stream很好,Map很酷,但答应我别用toMap():Java开发中的高效集合操作
在Java的世界里,Stream API和Map集合无疑是两大强大的工具,它们极大地简化了数据处理和集合操作的复杂度。然而,在享受这些便利的同时,我们也应当警惕一些潜在的陷阱,尤其是当Stream与Map结合使用时。本文将深入探讨Stream与Map的优雅用法,并特别指出在使用toMap()方法时需要注意的问题,旨在帮助大家在工作中更高效、更安全地使用这些技术。
18 0
|
2月前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。
|
2月前
|
安全 Java
【Java集合类面试五】、 如何得到一个线程安全的Map?
如何得到一个线程安全的Map的方法包括:使用Collections工具类将Map包装为线程安全,使用java.util.concurrent包下的ConcurrentHashMap,以及不推荐使用性能较差的Hashtable。
|
4月前
|
Dart
Dart之集合详解(List、Set、Map)
Dart之集合详解(List、Set、Map)
|
4月前
|
存储 JavaScript 前端开发
JavaScript进阶-Map与Set集合
【6月更文挑战第20天】JavaScript的ES6引入了`Map`和`Set`,它们是高效处理集合数据的工具。`Map`允许任何类型的键,提供唯一键值对;`Set`存储唯一值。使用`Map`时,注意键可以非字符串,用`has`检查键存在。`Set`常用于数组去重,如`[...new Set(array)]`。了解它们的高级应用,如结构转换和高效查询,能提升代码质量。别忘了`WeakMap`用于弱引用键,防止内存泄漏。实践使用以加深理解。
69 3
|
2月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
2月前
|
算法 Java 索引
【Java集合类面试四】、 描述一下Map put的过程
这篇文章详细描述了HashMap中put操作的过程,包括首次扩容、计算索引、插入数据以及链表转红黑树和可能的再次扩容。
【Java集合类面试四】、 描述一下Map put的过程
|
2月前
|
存储