Java容器——Map接口
1.定义
Map用于保存存在映射关系<key, value>的数据。其中key值不能重复(使用equals()方法比较),value值可以重复。
2.常用实现类
HashMap:和HashSet类似,键按键的HashCode()方法确定存储位置,无序
TreeMap:用于对键进行排序,方式与TreeSet相同
LinkedHashMap:和LinkedHashSet类似
3.方法
3.1 HashMap常用方法
void clear():移除所有映射
Object clone():浅拷贝原映射
boolean containsKey(Object key):判断是否包含指定键
boolean containsValue(Object value):判断是否包含指定值
Set<Map.Entry<K,V>> entrySet():返回包含映射关系的set集合
V get(Object key):查找给定键的值
boolean isEmpty():判断是否为空
Set<K> keySet():返回map中键的set集合
V put(K key, V value):存入键值对
V putIfAbsent(K key, V value):存入键值对,如果该键未存在map中
V remove(Object key):移除给定键的键值对
boolean remove(Object key, Object value):移除给定的键值对
V replace(K key, V value):替换给定键的值
boolean replace(K key, V oldValue, V newValue):如果键值对符合要求,替换新值
int size():返回键值对数目
Collection<V> values():返回value集合
注:Map接口没有继承Iterable接口,所以不能直接通过map.iterator进行遍历(List,Map拥有该接口,可以直接遍历),需要先转化为set类型,使用entrySet()方法,Map.Entry<k,v>中含有方法getKey()和getValue(),获取对应的键和值。
4.示例
MapFunc.java
import java.util.*;
public class MapFunc {
public static void main(String[] args) {
HashMap<String, Customer> hm1 = new HashMap<>();
hm1.put("a", new Customer(1,"AA"));
hm1.put("b", new Customer(2,"BB"));
hm1.put("c", new Customer(3,"CC"));
hm1.put("d", new Customer(4,"DD"));
hm1.put("e", new Customer(5,"EE"));
/*
* Map的几种遍历方法
* keySet、values、entrySet、entrySet.iterator
* */
// 利用keySet()遍历
Set<String> keys = hm1.keySet();
System.out.println("keys= "+ keys); // [a, b, c, d]
for(String key: keys){
System.out.println("key= "+ key + " and value= " + hm1.get(key));
}
// 利用values()遍历,无法遍历key
Collection<Customer> values = hm1.values();
System.out.println("values= "+ values); // [Customer:[Id=1, Name=AA],...]
for(Customer cus: values){
System.out.println("value= " + cus);
}
// 利用entrySet遍历
Set<Map.Entry<String,Customer>> entries = hm1.entrySet();
System.out.println("entries= "+ entries); // [a=Customer:[Id=1, Name=AA],...]
for(Map.Entry<String, Customer> entry: entries){
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
// 利用entrySet().iterator()遍历
Iterator<Map.Entry<String, Customer>> it = hm1.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, Customer> entry = it.next();
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
/*
* HashMap常用方法示例
* */
// get
Customer b = hm1.get("b");
System.out.println(b); // Customer:[Id=2, Name=BB]
// putIfAbsent, key值存在,不覆盖value
hm1.putIfAbsent("e",new Customer(5,"EEE"));
System.out.println(hm1);
// containsKey
boolean flag = hm1.containsKey("b");
System.out.println(flag); // true
// containsValue
flag = hm1.containsValue(b);
System.out.println(flag);
// remove
hm1.remove("c");
System.out.println(hm1); // Customer:[Id=3, Name=CC]
flag = hm1.remove("b", new Customer(1,"BB"));
System.out.println(flag); // false
// replace
hm1.replace("b", new Customer(2,"BBB"));
System.out.println(hm1);
hm1.replace("d",new Customer(4,"D"),
new Customer(4,"DDD")); // 注意!!!
System.out.println(hm1);
// clone
HashMap<String, Customer> hm2 = (HashMap<String, Customer>)hm1.clone();
System.out.println(hm2);
// clear
hm2.clear();
System.out.println(hm2); // {}
System.out.println(hm1);
// isEmpty
flag = hm2.isEmpty();
System.out.println(flag); // true
// size
int size = hm1.size();
System.out.println(size); //
}
}
Customer.java
import java.util.Objects;
public class Customer implements Comparable<Customer>{
private int customerId;
private String customerName;
public Customer(Integer customerId, String customerName) {
this.customerId = customerId;
this.customerName = customerName;
}
public int getCustomerId() {
return customerId;
}
public String getCustomerName() {
return customerName;
}
@Override
public String toString() {
return "Customer:[Id=" + customerId + ", Name=" + customerName + "]";
}
/*
* 重写compareTo方法
* 按Id或者name排序
* 可以对整体添加负号决定升降序
* */
@Override
public int compareTo(Customer o) {
// return this.customerId - o.customerId;
return this.customerName.compareTo(o.customerName);
}
/*
* 重写equals和hashcode方法
* 这里id和name相同则为同一对象
* */
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Customer)) return false;
Customer customer = (Customer) o;
return customerId == customer.customerId &&
Objects.equals(customerName, customer.customerName);
}
@Override
public int hashCode() {
return Objects.hash(customerId, customerName);
}
}
CustomerComparator.java
import java.util.Comparator;
public class CustomerComparator implements Comparator<Customer> {
@Override
public int compare(Customer c1, Customer c2) {
// 按Id排序
return c1.getCustomerId() - c2.getCustomerId();
}
}
!!!
Java容器——Map接口的更多相关文章
- Java容器Map接口
Map接口容器存放的是key-value对,由于Map是按key索引的,因此 key 是不可重复的,但 value 允许重复. 下面简单介绍一下Map接口的实现,包括HashMap,LinkedHas ...
- JAVA ,Map接口 ,迭代器Iterator
1. Map 接口概述 java.util.Map 接口描述了映射结构, Map 接口允许以键集.值集合或键 - 值映射关系集的形式查看某个映射的内容. Java 自带了各种 Map 类. 这些 ...
- Java集合Map接口与Map.Entry学习
Java集合Map接口与Map.Entry学习 Map接口不是Collection接口的继承.Map接口用于维护键/值对(key/value pairs).该接口描述了从不重复的键到值的映射. (1) ...
- Java Core - Map接口
Map:是一组映射The java.util.Map interface represents a mapping between a key and a value. The Map interfa ...
- java中map接口hashMap以及Enty之间的用法和关系
java中map接口hashMap以及Enty之间的转换 首先说的是map接口: Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value ...
- Java之Map接口(双列集合)
Map集合概述 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系的对 ...
- Java 之 Map 接口
一.Map 接口概述 java.util.Map 接口专门用来存放键值对这种对象关系的对象. 下面比较一下 Collection 与 Map 的区别: Collection 中的集合,元素是孤立存在的 ...
- Java集合——Map接口
1.定义 Map用于保存存在映射关系<key,value>的数据.其中,key值不能重复(使用equals()方法比较),value值可以重复 2.方法 V put(key,value) ...
- Java API —— Map接口
1.Map接口概述 · 将键映射到值的对象 · 一个映射不能包含重复的键 · 每个键最多只能映射到一个值 2.Map接口和Collection接口的 ...
随机推荐
- django 项目中使用多数据库 multiple databases
假如在一个django项目中使用到了不只一个数据库, 其实这在大一点的工程中很常见,比如主从库 那么会涉及到如下一些东西 1, 定义 在settings中的DATABASE中定义会使用到的数据,比如除 ...
- 20145220韩旭飞《网络对抗》Exp6 信息搜集与漏洞扫描
20145220韩旭飞<网络对抗>Exp6 信息搜集与漏洞扫描 信息搜集 whois查询 以百度的网址为例,使用whois查询域名注册信息: 从上图中可以得到3R注册信息,包括注册人的名字 ...
- Wireshark 捕捉本地数据 --WinPcap切换NPcap
Wireshark默认匹配安装的是WinPcap,但是WinPcap有个缺点,不能抓取本地回环数据 NPcap是在WinPcap的基础上进行优化开发的,可以抓取本地数据 如果已安装WinPcap的请卸 ...
- [Linux] - Linux安装JDK
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html <官方JDK下载 之后 ...
- C#学习笔记(六):循环嵌套、复杂数据类型和枚举
复杂数据类型 默认情况:0,1,2,3 赋值情况:0,3,4,5://修改初始值,后面都会改变 定义在class外面,作用域更大 定义在class里面(类种类),只能在类里使用 枚举作用:方便把不同角 ...
- ElasticSearch 5.4 自定义插件
ElasticSearch 做为数据仓库处理速度确实很强,但是很多和业务相关的函数ElasticSearch怎么支持的,通过查询发现,ElasticSearch支持自定义插件(相当于自定义函数),通过 ...
- Ubuntu 14.04 禁用ipv6
参考: 关闭IPV6,ubuntu 14.04 Ubuntu 14.04 禁用ipv6 1.检查ipv6是否开启: cat /proc/sys/net/ipv6/conf/all/disable_ip ...
- POJ 1018 Communication System(DP)
http://poj.org/problem?id=1018 题意: 某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m1.m2.m3.....mn个厂家提供生产,而每个厂家生产 ...
- java编程内容之开始
java应用程序开发应该掌握的各方面技术 1.初识java,熟悉Eclipse开发工具 2.java语言基础 3.流程控制,数组,字符串,类与对象 4.接口,继承与多态,类的高级特性 5.Java集合 ...
- 【BZOJ】4012: [HNOI2015]开店
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4012 给出一个$n$个点的树,树上每一个点都有一个值$age$,每条边都有边权,每次查询一 ...