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接口的 ... 
随机推荐
- Linux笔记 #07# 搭建机器学习环境
			环境: Debian 8.8 64位, 同样适用 win10 基本步骤: 安装 Python 安装必要的库 测试 一.安装 Python 延续之前的 搭建 Python 环境 选取折中版本 Pytho ... 
- TED #10# A rite of passage for late life
			Bob Stein: A rite of passage for late life Collection I grew up white, secular and middle class in 1 ... 
- bzoj1635 / P2879 [USACO07JAN]区间统计Tallest Cow
			P2879 [USACO07JAN]区间统计Tallest Cow 差分 对于每个限制$(l,r)$,我们建立一个差分数组$a[i]$ 使$a[l+1]--,a[r]++$,表示$(l,r)$区间内的 ... 
- 20145106 java实验二
			1)复数类ComplexNumber的属性 m_dRealPart: 实部,代表复数的实数部分 m_dImaginPart: 虚部,代表复数的虚数部分 public class ComplexNumb ... 
- 20145328 《网络对抗技术》MSF基础应用
			20145328 <网络对抗技术>MSF基础应用 --------------先提交,后续完成------------------ 
- 20145335郝昊《网络对抗技术》Exp6 信息搜集技术
			20145335郝昊<网络对抗技术>Exp6 信息搜集技术 实验内容 本次实验的目标是掌握信息搜集的最基础技能.具体有(1)各种搜索技巧的应用(2)DNS IP注册信息的查询 (3)基本的 ... 
- IPMB接口协议总结
			IPMB接口协议总结 IPMB,智能平台管理总线, 是ATCA(Advanced Telecom Computing Architecture)先进的电信计算平台的各FRU背板通讯的两组冗余I2C总线 ... 
- Delphi XE5 for Android (一)
			Delphi XE5 出来了,支持Android的开发,试用了一下,有几个问题: 1.只支持ARM7的设备,不支持Inter设备.手上刚好有一个华硕K004,很遗憾用不上,只能用手机试了. 2.要支持 ... 
- 【Coursera】History: Dawn of Electronic Computing学后小结
			今天学习了Coursera上University of Michigan开的互联网的历史.技术和安全课程的FirstWeek内容. 先是吐槽下这个Coursera,认证非常麻烦,PC端需要摄像头拍照. ... 
- 简易页面场景滚动的jquery插件
			(function($){ $.extend($.fn, { scene_scroll:function(arg_obj){ // 参数检测 // 场景数组 var $scene_arr = arg_ ... 
