Map接口概述

  Map接口中的集合和Collection接口中的集合在存储数据的格式上有很大的不同,Map接口下的内容是以<K , V> ,键值对的形式存储的,我们查询API,Map接口的描述是:

  将键映射到值的对象。一个映射不能包含重复的键每个键最多只能映射到一个值

Map接口常用实现类:

  • HashMap

    • 无序,键不可重复
    • 键和值都允许使用null 
  • LInkedHashMap
    • 线程不安全
    • 使用双向链表来维护key-value对的次序,该链表定义了迭代顺序,该迭代顺序与key-value对的插入顺序保持一致。
  • HashTable
    • 线程安全
    • 不容许使用null作为key和value
    • 不常用,现已被Properties类代替

Map的常用方法

  

 package com.shsxt.lisa;

 import java.util.Collection;
import java.util.HashMap;
import java.util.Map; /*
* Map接口中的常用方法
* 使用Map接口的实现类 HashMap
*/
public class MapDemo01 { public static void main(String[] args) { function2(); } /*
* put(K,V) ---> 将键值对存储到集合中
* 返回值: 一般情况下 返回值是null,当储存重复键时 会返回被覆盖的值
*/
public static void function() {
//
Map<String,Integer> map = new HashMap<>();
map.put("张二狗", 12);
map.put("zhang",13);
//有重复键时 后者会将前者覆盖
int i=map.put("zhang",2);
System.out.println(i);//当储存重复键时 会返回被覆盖的值 } /*
* get(K) ---> 通过键取对应的值
* 返回值: 一般情况下 返回值是null,当储存重复键时 会返回被覆盖的值
*/
public static void function1() {
Map<Integer, String> map=new HashMap<>();
map.put(1, "张三丰");
map.put(2, "张二二");
map.put(3, "张思思"); //
String string = map.get(5);
//如果集合中没有这个键 方法返回空
System.out.println(string);
} /*
* 移除集合中的键值对
* remove(K)---->返回 V
*/ public static void function2() {
Map<Integer, String> map=new HashMap<>();
map.put(1, "张三丰");
map.put(2, "张二二");
map.put(3, "张思思"); //返回被删掉的值
String string = map.remove(1);
//如果集合中没有这个键 方法返回空
System.out.println(string);
}
}

Map集合遍历的方式

  1. entrySet方法 键值对的映射关系(Entry键值对对象) 获取
  2. 通过keySet() 方法 获取Map集合中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键

     import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map; public class TestMap {
    public static void main(String[] args) {
    Map<Integer, String> map = new HashMap<Integer, String>();
    map.put(1, "a");
    map.put(2, "b");
    map.put(3, "ab");
    map.put(4, "ab");
    map.put(4, "ab");// 和上面相同 , 会自己筛选
    System.out.println(map.size());
    // 第一种:
    /*
    * Set<Integer> set = map.keySet(); //得到所有key的集合
    *
    * for (Integer in : set) { String str = map.get(in);
    * System.out.println(in + " " + str); }
    */
    System.out.println("第一种:通过Map.keySet遍历key和value:");
    for (Integer in : map.keySet()) {
    //map.keySet()返回的是所有key的值
    String str = map.get(in);//得到每个key多对用value的值
    System.out.println(in + " " + str);
    }
    // 第二种:
    System.out.println("第二种:通过Map.entrySet使用iterator遍历key和value:");
    Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
    while (it.hasNext()) {
    Map.Entry<Integer, String> entry = it.next();
    System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
    }
    // 第三种:推荐,尤其是容量大时
    System.out.println("第三种:通过Map.entrySet遍历key和value");
    for (Map.Entry<Integer, String> entry : map.entrySet()) {
    //Map.entry<Integer,String> 映射项(键-值对) 有几个方法:用上面的名字entry
    //entry.getKey() ;entry.getValue(); entry.setValue();
    //map.entrySet() 返回此映射中包含的映射关系的 Set视图。
    System.out.println("key= " + entry.getKey() + " and value= "
    + entry.getValue());
    }
    // 第四种:
    System.out.println("第四种:通过Map.values()遍历所有的value,但不能遍历key");
    for (String v : map.values()) {
    System.out.println("value= " + v);
    }
    }
    }

练习题

1.分析以下需求,并用代码实现:
(1)定义一个学生类Student,包含属性:姓名(String name)、年龄(int age)
(2)定义Map集合,用Student对象作为key,用字符串(此表示表示学生的住址)作为value
(3)利用四种方式遍历Map集合中的内容,格式:key::value

 package com.shsxt.homework;

 import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; /*
* 1.分析以下需求,并用代码实现:
(1)定义一个学生类Student,包含属性:姓名(String name)、年龄(int age)
(2)定义Map集合,用Student对象作为key,用字符串(此表示表示学生的住址)作为value
(3)利用四种方式遍历Map集合中的内容,格式:key::value
*/
public class Homework01 { public static void main(String[] args) {
Map<Student,String> map = new HashMap<>();
map.put(new Student("张二狗",12),"大理国内的村子");
map.put(new Student("元首",10),"啦啦啦德玛西亚");
map.put(new Student("BigBean",23),"克苏鲁大陆"); //1 keyset
Set<Student> set=map.keySet();
for(Student s : set){
System.out.println(s+"::"+map.get(s));
}
System.out.println("-------------"); //2 entry
Set<Entry<Student, String>> entrySet = map.entrySet();
Iterator<Entry<Student, String>> it=entrySet.iterator();
while(it.hasNext()){
Entry<Student, String> entry= it.next();
System.out.println(entry.getKey()+"::"+entry.getValue());
} System.out.println("-------------");
//第三种 :推荐 尤其是容量大时
System.out.println("第三种:通过Map.entrySet遍历key和value");
for(Map.Entry<Student, String> entry:map.entrySet()){
System.out.println(entry.getKey()+"::"+entry.getValue());
} System.out.println("-------------");
// 第四种:
System.out.println("第四种:通过Map.values()遍历所有的value,但不能遍历key");
for(String string:map.values()){
System.out.println("value = "+ string);
}
} }
class Student{ private String name; private int age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Student(String name, int age) {
super();
this.name = name;
this.age = age;
} public Student() {
super();
// TODO Auto-generated constructor stub
} @Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
} }

2.分析以下需求,并用代码实现:
(1)利用键盘录入,输入一个字符串
(2)统计该字符串中各个字符的数量
(3)如:
用户输入字符串"If~you-want~to~change-your_fate_I_think~you~must~come-to-the-dark-horse-to-learn-java"
程序输出结果:-(9)I(2)_(3)a(7)c(2)d(1)e(6)f(2)g(1)h(4)i(1)j(1)k(2)l(1)m(2)n(4)o(8)r(4)s(2)t(8)u(4)v(1)w(1)y(3)~(6)

 package com.shsxt.homework;

 import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap; /*
* 2.分析以下需求,并用代码实现:
(1)利用键盘录入,输入一个字符串
(2)统计该字符串中各个字符的数量
(3)如:
用户输入字符串"If~you-want~to~change-your_fate_I_think~you~must~come-to-the-dark-horse-to-learn-java"
程序输出结果:-(9)I(2)_(3)a(7)c(2)d(1)e(6)f(2)g(1)h(4)i(1)j(1)k(2)l(1)m(2)n(4)o(8)r(4)s(2)t(8)u(4)v(1)w(1)y(3)~(6)
*/
public class Homework02 { public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串: ");
String str = sc.nextLine();
System.out.println("您输入的是: "+ str); //String str="If~you-want~to~change-your_fate_I_think~you~must~come-to-the-dark-horse-to-learn-java";
//String str="Happy Happy";
char ch[]= new char[20];
ch=str.toCharArray();
String res=getTimes(str);
System.out.println(res); } public static String getTimes(String str){
//1 将字符串转成字符串数组
char ch[]=str.toCharArray();
//2 创建一个map\集合 将字符和出现的次数存储到集合中
Map<Character, Integer> map= new TreeMap<>();
//3 遍历字符数组
for(char c :ch){
map.put(c,map.get(c)!= null?map.get(c)+1:1);
}
//4 创建StringBuffer
StringBuffer sb = new StringBuffer();
//5 遍历map集合
for(Map.Entry<Character, Integer> entry : map.entrySet()){
sb.append(entry.getKey()).append("(").append(entry.getValue()).append(")");
}
//6 返回StirngBuffer return sb.toString();
} }

集合之六:Map接口的更多相关文章

  1. Java集合框架Map接口

    集合框架Map接口 Map接口: 键值对存储一组对象 key不能重复(唯一),value可以重复 常用具体实现类:HashMap.LinkedHashMap.TreeMap.Hashtable Has ...

  2. Java集合中Map接口的使用方法

    Map接口 Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value: Map中的键值对以Entry类型的对象实例形式存在: 建(key值 ...

  3. Java:集合,Map接口框架图

    Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...

  4. Java集合——集合框架Map接口

    1.Map接口 public interface Map<K,V>将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.  2.HashMap.Hashtable.Tr ...

  5. Java集合框架——Map接口

    第三阶段 JAVA常见对象的学习 集合框架--Map集合 在实际需求中,我们常常会遇到这样的问题,在诸多的数据中,通过其编号来寻找某一些信息,从而进行查看或者修改,例如通过学号查询学生信息.今天我们所 ...

  6. JAVA集合框架 - Map接口

    Map 接口大致说明(jdk11): 整体介绍: 一个将键映射到值的(key-value)对象, 键值(key)不能重复, 每个键值只能影射一个对象(一一对应). 这个接口取代了Dictionary类 ...

  7. Java集合之Map接口

    Map使用键值对来存储数据,将键映射到值对象,一个映射不能包含重复的键,每一个键最多只能映射到一个值.Map接口的具体实现类:HashMap,Hashtable,TreeMap,LinkedHashM ...

  8. 集合之Map接口

    Map接口概述 Map与Collection并列存在.用于存储具有映射关系的数据 : key-value Map 中的 key 和 value 都可以是任何引用类型的数据 Map 中的 key 用Se ...

  9. 第19章 集合框架(3)-Map接口

    第19章 集合框架(3)-Map接口 1.Map接口概述 Map是一种映射关系,那么什么是映射关系呢? 映射的数学解释 设A,B是两个非空集合,如果存在一个法则,使得对A中的每一个元素a,按法则f,在 ...

随机推荐

  1. Yii2 windows 安装步骤

    安装 Yii2 高级版应用 基础版可以看官方文档 今天安装了YII2高级版应用 写下步骤 留个记号,以备查询! 在 Windows 中,你首先需要下载并运行 Composer-Setup.exe 查看 ...

  2. android安装前期遇到的问题

    1.安装的eclipse与对应的java版本位数要一致,要么32位,要么64位. 2.关于新版ADT创建项目时出现appcompat_v7的问题 更新ADT至22.6.0版本之后,创建新的安装项目,会 ...

  3. Java程序设计8——抽象类、接口与内部类

    1 抽象类 当编写一个类时,常常会为该类定义一些方法,这些方法用以描述该类的行为方式,那么这些方法都有具体的方法体.但在某些情况下,某个父类并不需要实现,因为它只需要当做一个模板,而具体的实现,可以由 ...

  4. js 右击事件

    $.fn.extend({        "rightclick": function (fn) {            $(this).mousedown(function ( ...

  5. 用JQ去实现一个轮播效果

    前提:用JQ去实现轮播效果一步步的做一个梳理. 首先肯定是轮播的HTML和CSS样式了: <body> <div class="pic"> <div ...

  6. BZOJ 4326 NOIP2015 运输计划 (二分+树上差分)

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1930  Solved: 1231[Submit][Statu ...

  7. handsontable-developer guide-cell function

    renderer 展示的数据不是来自于数据源,而是先把DOM和其他信息传给renderer,然后展示. //五种展示函数 TextRenderer: default NumericRenderer A ...

  8. TypeToken 是google提供的一个解析Json数据的类库中一个类

    Type listType = new TypeToken<LinkedList<User>>(){}.getType(); Type是java里的reflect包的Type ...

  9. ARPG游戏打击感相关的技术简单总结

    说好的技术总结,根据近期的工作总结一下体现游戏打击感相关的技术.一般arpg的游戏打击感除了场景的氛围的烘托,策划的数值:连击,奖励伤害数字的连贯积累反馈,硬直加物理击飞ragdoll,更不可忽视的也 ...

  10. EBS常用接口表

    AP接口表: AP_INVOICES_INTERFACE AP_INVOICE_LINES_INTERFACE 涉及的请求: 应付款管理系统开放接口导入 涉及案例: 运费导AP.费用导AP PO接口表 ...