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. java 实现模拟浏览器 访问网站

    一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器,用来浏览页面查看信息或者提交一些数据等等.所访问的这些页面 有的仅仅是一些普通的页面,有的需要用户登录后方可使用,或者需 ...

  2. win8上部署.net4.0程序到iis

    在win8.1上默认的iis版本为8.5版,不做任何配置回报3个错误, 一下是错误提示内容及解决方案 1>HTTP 错误 404.3 – Not Found由于扩展配置问题而无法提供您请求的页面 ...

  3. mybatis整合spring的完整过程

    1.1 整合思路 1.SqlSessionFactory对象应该放到spring容器中作为单例存在. 2.传统dao的开发方式中,应该从spring容器中获得sqlsession对象. 3.Mappe ...

  4. ant的hello world很好的官方文档[z]

    http://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html

  5. 将Halcon导出的多个dxf文件合并成一个分图层的dxf文件

    Halcon中可以通过concat_obj合并多个XLD,并且可以通过write_contour_xld_dxf再将XLD保存为.dxf文件.但是,保存后的.dxf文件用AutoCAD打开后发现,它们 ...

  6. 从iOS 11 UI Kit中谈谈iOS 11的新变化

    北京时间9月20日凌晨1点,iOS 11终于迎来了正式版的推送,相信各位小伙伴已经在第一时间进行了升级.iOS 11毫无疑问是一次大规模的系统更新,UI.系统内核.锁屏等多方面都进行了不同程度的改进. ...

  7. 文字如何实现完美UI?文本排版设计告诉你

    一部手机,电量充足,网络通畅,就足以让我们打发一天的时光,尽情沉浸在手机时代的缤纷世界里.这个信息资源无穷尽的手机网络世界,是设计师和开发者们在不停的探索中一路一步精心打造.如何进一步美化这个世界,优 ...

  8. java 控制反转和依赖注入的理解

    开始好好学习java基础和思想~ 控制反转(IOC)是Spring框架的核心思想,用我自己的话说,就是你要做一件事,别自己可劲new了,你就说你要干啥,然后外包出去就好~ 依赖注入(DI) 在我浅薄的 ...

  9. ST-LINK驱动的安装

    1.下载ST-LINK驱动ST-LINK_USB_V2_1_Driver 双击dpinst_amd64.exe来安装. 成功会显示: 2.进入MDK5里面去配置ST-LINK 通过魔术棒选项: a.D ...

  10. linux数据库备份

    linux数据库备份 服务端启用二进制日志 如果日志没有启开,必须启用binlog,要重启mysql,首先,关闭mysql,打开/etc/my.cnf,加入以下几行: [mysqld] log-bin ...