Java笔记 Map集合

简介: Java笔记 Map集合

Map集合没有继承Collection接口,其提供的是key到value的映射。Map中不能包含相同的key,每个key只能映射一个value。key还决定了存储对象在映射中的存储位置,但不是由key对象本身决定的,而是通过一种“散列技术”进行处理,产生一个散列码的整数值,散列码通常用作一个偏移量,该偏移量对应分配给映射的内存区域的起始位置,从而确定存储对象在映射中的存储位置。Map集合包括Map接口以及Map接口的所有实现类。

Map接口提供了将key映射到值的对象。一个映射不能包含重复的key,每个key最多只能映射到一个值。Map接口中同样提供了集合的常用方法

获取Map集合中的所有key对象集合和所有values值集合,最后遍历集合。

import java.util.*;
public class UpdateStu {
  public static void main(String[] args) {
    Map<String,String> map = new HashMap<>(); // 创建Map实例
    map.put("01", "李同学"); // 向集合中添加对象
    map.put("02", "魏同学");
    Set<String> set = map.keySet(); // 构建Map集合中所有key对象的集合
    Iterator<String> it = set.iterator(); // 创建集合迭代器
    System.out.println("key集合中的元素:");
    while (it.hasNext()) { // 遍历集合
      System.out.println(it.next());
    }
    Collection<String> coll = map.values(); // 构建Map集合中所有values值集合
    it = coll.iterator();
    System.out.println("values集合中的元素:");
    while (it.hasNext()) { // 遍历集合
      System.out.println(it.next());
    }
  }
}

Map接口常用的实现类有HashMap和TreeMap。建议使用HashMap类实现Map集合,因为由HashMap类实现的Map集合添加和删除映射关系效率更高。HashMap是基于哈希表的Map接口的实现,HashMap通过哈希码对其内部的映射关系进行快速查找;而TreeMap中的映射关系存在一定的顺序,如果希望Map集合中的对象也存在一定的顺序,应该使用TreeMap类实现Map集合。

HashMap类是基于哈希表的Map接口的实现,此实现提供所有可选的映射操作,并允许使用null值和null键,但必须保证键的唯一性。HashMap通过哈希表对其内部的映射关系进行快速查找。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

TreeMap类不仅实现了Map接口,还实现了java.util.SortedMap接口,因此,集合中的映射关系具有一定的顺序。但在添加、删除和定位映射关系时,TreeMap类比HashMap类性能稍差。由于TreeMap类实现的Map集合中的映射关系是根据键对象按照一定的顺序排列的,因此不允许键对象是null。可以通过HashMap类创建Map集合,当需要顺序输出时,再创建一个完成相同映射关系的TreeMap类实例。

新建一个Map集合,并添加集合对象。分别遍历由HashMap类与TreeMap类实现的Map集合

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class MapText { // 创建类MapText
  public static void main(String[] args) { // 主方法
    Map<String, String> map = new HashMap<>(); // 由HashMap实现的Map对象
    Emp emp = new Emp("351", "张三"); // 创建Emp对象
    Emp emp2 = new Emp("512", "李四");
    Emp emp3 = new Emp("853", "王一");
    Emp emp4 = new Emp("125", "赵六");
    Emp emp5 = new Emp("341", "黄七");
    map.put(emp4.getE_id(), emp4.getE_name()); // 将对象添加到集合中
    map.put(emp5.getE_id(), emp5.getE_name());
    map.put(emp.getE_id(), emp.getE_name());
    map.put(emp2.getE_id(), emp2.getE_name());
    map.put(emp3.getE_id(), emp3.getE_name());
    Set<String> set = map.keySet(); // 获取Map集合中的key对象集合
    Iterator<String> it = set.iterator();
    System.out.println("HashMap类实现的Map集合,无序:");
    while (it.hasNext()) { // 遍历Map集合
      String str = (String) it.next();
      String name = (String) map.get(str);
      System.out.println(str + " " + name);
    }
    TreeMap<String, String> treemap = new TreeMap<>(); // 创建TreeMap集合对象
    treemap.putAll(map); // 向集合添加对象
    Iterator<String> iter = treemap.keySet().iterator();
    System.out.println("TreeMap类实现的Map集合,键对象升序:");
    while (iter.hasNext()) { // 遍历TreeMap集合对象
      String str = (String) iter.next(); // 获取集合中的所有key对象
      String name = (String) treemap.get(str); // 获取集合中的所有values值
      System.out.println(str + " " + name);
    }
  }
}

Map集合中允许值对象是null,而且没有个数限制。例如,可通过map.put(“05”,null);语句向集合中添加对象。


相关文章
|
14天前
|
Java
Java基础—笔记—static篇
`static`关键字用于声明静态变量和方法,在类加载时初始化,只有一份共享内存。静态变量可通过类名或对象访问,但推荐使用类名。静态方法无`this`,不能访问实例成员,常用于工具类。静态代码块在类加载时执行一次,用于初始化静态成员。
10 0
|
14天前
|
Java API 索引
Java基础—笔记—String篇
本文介绍了Java中的`String`类、包的管理和API文档的使用。包用于分类管理Java程序,同包下类无需导包,不同包需导入。使用API时,可按类名搜索、查看包、介绍、构造器和方法。方法命名能暗示其功能,注意参数和返回值。`String`创建有两种方式:双引号创建(常量池,共享)和构造器`new`(每次新建对象)。此外,列举了`String`的常用方法,如`length()`、`charAt()`、`equals()`、`substring()`等。
15 0
|
29天前
|
Java
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
25 0
|
1月前
|
算法 Java 数据处理
Java集合框架的优缺点
Java集合框架的优缺点
|
1月前
|
网络协议 算法 Java
|
14小时前
|
存储 安全 Java
[Java基础面试题] Map 接口相关
[Java基础面试题] Map 接口相关
|
1天前
|
存储 Java C++
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
8 0
|
12天前
|
存储 算法 安全
Java Map:键值对的奇妙之旅
Java Map:键值对的奇妙之旅
41 0
Java Map:键值对的奇妙之旅
|
12天前
|
存储 Java 编译器
Java集合丛林:深入了解集合框架的秘密
Java集合丛林:深入了解集合框架的秘密
15 0
Java集合丛林:深入了解集合框架的秘密
|
14天前
|
Java API
Java基础—笔记—内部类、枚举、泛型篇
本文介绍了Java编程中的内部类、枚举和泛型概念。匿名内部类用于简化类的创建,常作为方法参数,其原理是生成一个隐含的子类。枚举用于表示有限的固定数量的值,常用于系统配置或switch语句中。泛型则用来在编译时增强类型安全性,接收特定数据类型,包括泛型类、泛型接口和泛型方法。
9 0