集合——Map

Map家族

实现类:

  1. HashMap
  2. LinkedHashMap
  3. Hashtable
  4. ConcurrentHashMap
  5. TreeMap
  6. Properties

1.HashMap

1.1 使用方法

代码实现:

package com.study.hashmap;import java.util.Collection;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;public class Test01 {public static void main(String[] args) {//HashMap key是唯一的,value可以重复HashMap<String, Integer> map1 = new HashMap<String, Integer>();//添加元素map1.put("Tom", 18);map1.put("Jack", 19);map1.put("Timy", 21);map1.put("Marray", 20);//清空集合//map1.clear();System.out.println("判断集合中是否包含某个key:"+map1.containsKey("Jack"));System.out.println("判断集合中是否包含某个values:"+map1.containsValue(19));System.out.println("----------------------");//通过key获取valueSystem.out.println("通过key获取value:"+map1.get("Tom"));System.out.println("通过key获取value:"+map1.getOrDefault("小白",20));System.out.println("----------------------");System.out.println("判断集合中是否为空:"+map1.isEmpty());System.out.println("----------------------");HashMap<String,Integer> newMap1 = new HashMap<>();newMap1.put("aaa", 10);newMap1.put("bbb", 20);newMap1.put("ccc", 30);//将新集合中所有的元素添加到map集合中map1.putAll(newMap1);//添加元素,如果有key,则返回在集合中的value//如果没有key,则添加key——valueInteger putIfAbsent = map1.putIfAbsent("Tom", 24);System.out.println(putIfAbsent);System.out.println("----------------------");//删除map1.remove("aaa");//通过key删除映射关系map1.remove("bbb",20);//通过key+value删除映射关系//替换//map1.replace("ccc", 30,25);//添加元素,如果有相同key,就替换value,并返回Integer put = map1.put("ccc", 25);System.out.println("返回替换前的value值:" + put);System.out.println("----------------------");//获取映射数System.out.println("key-value的映射数:"+map1.size());System.out.println("----------------------");//获取所有的keySet<String> keySet = map1.keySet();for (String key : keySet) {System.out.println(key);}System.out.println("----------------------");//获取所有的valuesCollection<Integer> values = map1.values();for (Integer value : values) {System.out.println(value);}System.out.println("----------------------");//遍历——keySetSet<String> keySet2 = map1.keySet();for (String key2 : keySet2) {Integer values2 = map1.get(key2);System.out.println(key2+"--"+values2);}System.out.println("----------------------");//遍历——Entry//把HashMap中所有的映射关系(Entry)抽取出存放在Set集合中,遍历Set集合依次取出映射关系(Entry),//就能获取映射关系中的key和valueSet<Entry<String,Integer>> entrySet = map1.entrySet();for (Entry<String, Integer> entry : entrySet) {String key = entry.getKey();Integer value = entry.getValue();System.out.println(key+"--"+value);}}
}

输出结果:

判断集合中是否包含某个key:true
判断集合中是否包含某个values:true
----------------------
通过key获取value:18
通过key获取value:20
----------------------
判断集合中是否为空:false
----------------------
18
----------------------
返回替换前的value值:30
----------------------
key-value的映射数:5
----------------------
ccc
Tom
Timy
Jack
Marray
----------------------
25
18
21
19
20
----------------------
ccc--25
Tom--18
Timy--21
Jack--19
Marray--20
----------------------
ccc--25
Tom--18
Timy--21
Jack--19
Marray--20

2.Hashtable

Hashtable的使用方法与HashMap一致

3.linkedHashMap

linkedHashMap的适用法方法与HashMap一致

4.concurrentHashMap

concurrentHashMap的使用方法与HashMap一致

5.HashMap、Hashtable、linkedHashMap和concurrentHashMap的区别

HashMap Hashtable linkedHashMap concurrentHashMap
存储方式 键值对 键值对 键值对 键值对
是否有序 无序 无序 有序 无序
允许key为null 允许 不允许 允许 不允许
线程安全 不安全 安全 不安全 安全

6.TreeMap

TreeMap使用方法大致与HashMap一致,但它可以实现自然排序

其排序分为内置比较器和外置比较器,与TreeSet相似

需求1:

//写一个Student类,使用TreeMap集合存储,实现按年龄大小排序
package com.study.treemap;import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;public class Test01 {public static void main(String[] args) {//内置比较器,按照年龄排序TreeMap<Student,Character> map = new TreeMap<>();map.put(new Student("麻生希", '女', 26, "2107", "001"),'女');map.put(new Student("北岛玲", '女', 31, "2107", "002"),'女');map.put(new Student("水菜类", '女', 29, "2107", "003"),'女');map.put(new Student("樱井步", '女', 26, "2107", "004"),'女');map.put(new Student("朝桐光", '女', 33, "2107", "005"),'女');map.put(new Student("椎名空", '女', 29, "2107", "006"),'女');map.put(new Student("爱田奈奈", '女', 34, "2107", "007"),'女');map.put(new Student("水野朝阳", '女', 26, "2107", "008"),'女');map.put(new Student("小峰由衣", '女', 29, "2107", "009"),'女');map.put(new Student("古川伊织", '女', 25, "2108", "001"),'女');map.put(new Student("吉泽明步", '女', 27, "2108", "002"),'女');map.put(new Student("三上悠亚", '女', 24, "2108", "003"),'女');map.put(new Student("深田咏美", '女', 24, "2108", "004"),'女');map.put(new Student("泷泽萝拉", '女', 29, "2108", "005"),'女');map.put(new Student("濑亚美莉", '女', 29, "2108", "006"),'女');Set<Entry<Student, Character>> entrySet = map.entrySet();for (Entry<Student, Character> entry : entrySet) {Student key = entry.getKey();Character value = entry.getValue();System.out.println(key+" -- "+value);}}
}package com.study.treemap;public class Student implements Comparable<Student>{private String name;private char sex;private int age;private String classId;private String id;public Student() {}public Student(String classId, String id) {this.classId = classId;this.id = id;}public Student(String name, char sex, int age, String classId, String id) {this.name = name;this.sex = sex;this.age = age;this.classId = classId;this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getClassId() {return classId;}public void setClassId(String classId) {this.classId = classId;}public String getId() {return id;}public void setId(String id) {this.id = id;}@Overridepublic boolean equals(Object obj) {if(this == obj){return true;}if(obj instanceof Student){Student stu = (Student) obj;if(this.classId.equals(stu.classId) && this.id.equals(stu.id)){return true;}}return false;}@Overridepublic String toString() {return name + "\t" + sex + "\t" + age + "\t" + classId + "\t" + id;}//比较规则//需求:按照年龄排序@Overridepublic int compareTo(Student o) {return this.age - o.age;}
}

输出结果:

三上悠亚 女   24  2108    003 -- 女
古川伊织    女   25  2108    001 -- 女麻生希 女   26  2107    001 -- 女
吉泽明步    女   27  2108    002 -- 女水菜类 女   29  2107    003 -- 女北岛玲 女   31  2107    002 -- 女朝桐光 女   33  2107    005 -- 女
爱田奈奈    女   34  2107    007 -- 女

需求2:

//写一个Student类,使用TreeMap集合存储,实现按姓名长度排序,如果姓名长度相等那么就按照年龄大小排序
package com.study.treemap;import java.util.Comparator;
import java.util.Set;
import java.util.TreeMap;
import java.util.Map.Entry;public class Test02 {public static void main(String[] args) {//外置比较器TreeMap<Student,Character> map = new TreeMap<>(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {if(o1.equals(o2)){return 0;}if(o1.getName().length() != o2.getName().length()){return o1.getName().length() - o2.getName().length();}if(o1.getAge() != o2.getAge()){return o1.getAge() - o2.getAge();}return 1;}});map.put(new Student("麻生希", '女', 26, "2107", "001"),'女');map.put(new Student("北岛玲", '女', 31, "2107", "002"),'女');map.put(new Student("水菜类", '女', 29, "2107", "003"),'女');map.put(new Student("樱井步", '女', 26, "2107", "004"),'女');map.put(new Student("朝桐光", '女', 33, "2107", "005"),'女');map.put(new Student("椎名空", '女', 29, "2107", "006"),'女');map.put(new Student("爱田奈奈", '女', 34, "2107", "007"),'女');map.put(new Student("水野朝阳", '女', 26, "2107", "008"),'女');map.put(new Student("小峰由衣", '女', 29, "2107", "009"),'女');map.put(new Student("古川伊织", '女', 25, "2108", "001"),'女');map.put(new Student("吉泽明步", '女', 27, "2108", "002"),'女');map.put(new Student("三上悠亚", '女', 24, "2108", "003"),'女');map.put(new Student("深田咏美", '女', 24, "2108", "004"),'女');map.put(new Student("泷泽萝拉", '女', 29, "2108", "005"),'女');map.put(new Student("濑亚美莉", '女', 29, "2108", "006"),'女');Set<Entry<Student, Character>> entrySet = map.entrySet();for (Entry<Student, Character> entry : entrySet) {Student key = entry.getKey();Character value = entry.getValue();System.out.println(key+" -- "+value);}}
}package com.study.treemap;public class Student implements Comparable<Student>{private String name;private char sex;private int age;private String classId;private String id;public Student() {}public Student(String classId, String id) {this.classId = classId;this.id = id;}public Student(String name, char sex, int age, String classId, String id) {this.name = name;this.sex = sex;this.age = age;this.classId = classId;this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getClassId() {return classId;}public void setClassId(String classId) {this.classId = classId;}public String getId() {return id;}public void setId(String id) {this.id = id;}@Overridepublic boolean equals(Object obj) {if(this == obj){return true;}if(obj instanceof Student){Student stu = (Student) obj;if(this.classId.equals(stu.classId) && this.id.equals(stu.id)){return true;}}return false;}@Overridepublic String toString() {return name + "\t" + sex + "\t" + age + "\t" + classId + "\t" + id;}//比较规则//需求:按照年龄排序@Overridepublic int compareTo(Student o) {return this.age - o.age;}
}

输出结果:

 麻生希 女   26  2107    001 -- 女樱井步 女   26  2107    004 -- 女水菜类 女   29  2107    003 -- 女椎名空 女   29  2107    006 -- 女北岛玲 女   31  2107    002 -- 女朝桐光 女   33  2107    005 -- 女
三上悠亚    女   24  2108    003 -- 女
深田咏美    女   24  2108    004 -- 女
古川伊织    女   25  2108    001 -- 女
水野朝阳    女   26  2107    008 -- 女
吉泽明步    女   27  2108    002 -- 女
小峰由衣    女   29  2107    009 -- 女
泷泽萝拉    女   29  2108    005 -- 女
濑亚美莉    女   29  2108    006 -- 女
爱田奈奈    女   34  2107    007 -- 女

7.Properties

作配置文件使用

案例:

package com.study.properties;import java.io.IOException;
import java.util.Properties;public class Test01 {public static void main(String[] args) throws IOException {Properties properties = new Properties();properties.load(Test01.class.getClassLoader().getResourceAsStream("DBConfig.properties"));/*配置文件DBConfig.properties中内容为:username=adminpassword=123456配置文件添加在src文件夹中*/          String username = properties.getProperty("username");String password = properties.getProperty("password");System.out.println(username+"  --  "+password);}
}

java集合——Map相关推荐

  1. Java集合Map,set, list 之间的转换

    Java集合Map,set, list 之间的转换 前言: 通过思维导图复习联系,看到一个HashMap排序题上机题之后有的一个感想,题目如下,看看你能时间出来么? 已知一个HashMap<In ...

  2. Java——集合(Map集合的两种迭代)

    一,Map集合的第一种迭代 Map集合的第一种迭代,通过get(key)方法,根据键去获取值 package com.wsq.map;import java.util.HashMap; import ...

  3. 终于,我读懂了所有Java集合——map篇

    首先,红黑树细节暂时撸不出来,所以没写,承诺年前一定写 HashMap (底层是数组+链表/红黑树,无序键值对集合,非线程安全) 基于哈希表实现,链地址法. loadFactor默认为0.75,thr ...

  4. Java集合——Map接口学习总结

    一.HashMap实现类 1.常用方法 增加:put(K key, V value)删除:clear() remove(Object key)修改:查看:entrySet() get(Object k ...

  5. Java集合 —— Map集合

    Collection接口包含List接口与Set接口 --List 元素有序(存储顺序和取出顺序一致),元素可以重复 实现List接口的三个具体类有 ArrayList,vector,LinkedLi ...

  6. java集合 — — Map集合

    十.Map集合 10.1.概述 现实生活中,常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一对应的关系,就叫做映射.Java提供了专门的集台类用来存放这种对 ...

  7. Java集合Map(四)

    ****************************Map********************************** Map Hashtable HashMap 1.键值对 2.没有迭代 ...

  8. 终于,我读懂了所有Java集合——map篇(多线程)

    多线程环境下的问题 1.8中hashmap的确不会因为多线程put导致死循环(1.7代码中会这样子),但是依然有其他的弊端,比如数据丢失等等.因此多线程情况下还是建议使用ConcurrentHashM ...

  9. [优雅代码]-调用java集合Map.computeIfAbsent()方法

    java版本JDK1.8 Map是我们经常使用的,在面对复杂Map时,我们怎么更好的去维护呢? 这里的复杂Map就是<K,V>中V是一个Collection集合比如: 那么它是一个复杂Ma ...

最新文章

  1. Tomcat 6.0.32 +Spring dbcp datasource关闭Tomcat出现严重异常
  2. Google Guice使用入门
  3. mybati内sql查询语句在两个日期内
  4. html元素移动时颜色逐渐变深,css实现随鼠标移动div渐变色效果
  5. python给视频加水印_视频水印_Python SDK_服务端SDK_视频点播 - 阿里云
  6. leetcode 205. 同构字符串
  7. Memcache存储大数据的问题
  8. element ui 中 el-menu 如何添加链接router-link标签
  9. ssm提交post_我用spring mvc做,用post方式提交,后台获取不到参数值,用get方式就可以,什么问题...
  10. 不停机与停机更新_Istio的零停机滚动更新
  11. vb.net 与 c# 的switch ... case ...的一个重要区别
  12. 前端真题面试必备面试题及答案
  13. 没有大数据就没有智慧城市
  14. Note For Linux By Jes(18)-X Window 配置介绍
  15. 25匹马5个跑道,选出最快的5匹马?
  16. VMware虚拟机之安装VMware虚拟机平台
  17. JAVA设计模式十七--Composite(组合模式)
  18. 数据加工:Sql截取之间的字符串的方法
  19. 借力SPC,品质数据异常监控与分析仅需几分钟搞定
  20. 邮件发送时间怎么修改 python_怎么发送邮箱-2分钟教会你如何利用Python库定时或者批量发送电子邮件...

热门文章

  1. 账号批量注册软件开发启示录
  2. spark 实现K-means算法
  3. <12>springboot集成thymeleaf模板引擎
  4. VS2019许可证过期解决办法
  5. 基金A类和C类的科普贴
  6. 计算机硬件发展慢,老电脑卡慢应该更换哪些硬件?看完秒懂
  7. R语言 lars包 lars()函数中文帮助文档(中英文对照)
  8. simulink多输入示波器波形数据导出到workspace用plot函数重新画出
  9. CH559L单片机ADC介绍以及ADC采样案例
  10. 线上教育相关的微信公众号图文这样排版,阅读量翻十倍!