java集合——Map
集合——Map
Map家族
实现类:
- HashMap
- LinkedHashMap
- Hashtable
- ConcurrentHashMap
- TreeMap
- 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相关推荐
- Java集合Map,set, list 之间的转换
Java集合Map,set, list 之间的转换 前言: 通过思维导图复习联系,看到一个HashMap排序题上机题之后有的一个感想,题目如下,看看你能时间出来么? 已知一个HashMap<In ...
- Java——集合(Map集合的两种迭代)
一,Map集合的第一种迭代 Map集合的第一种迭代,通过get(key)方法,根据键去获取值 package com.wsq.map;import java.util.HashMap; import ...
- 终于,我读懂了所有Java集合——map篇
首先,红黑树细节暂时撸不出来,所以没写,承诺年前一定写 HashMap (底层是数组+链表/红黑树,无序键值对集合,非线程安全) 基于哈希表实现,链地址法. loadFactor默认为0.75,thr ...
- Java集合——Map接口学习总结
一.HashMap实现类 1.常用方法 增加:put(K key, V value)删除:clear() remove(Object key)修改:查看:entrySet() get(Object k ...
- Java集合 —— Map集合
Collection接口包含List接口与Set接口 --List 元素有序(存储顺序和取出顺序一致),元素可以重复 实现List接口的三个具体类有 ArrayList,vector,LinkedLi ...
- java集合 — — Map集合
十.Map集合 10.1.概述 现实生活中,常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一对应的关系,就叫做映射.Java提供了专门的集台类用来存放这种对 ...
- Java集合Map(四)
****************************Map********************************** Map Hashtable HashMap 1.键值对 2.没有迭代 ...
- 终于,我读懂了所有Java集合——map篇(多线程)
多线程环境下的问题 1.8中hashmap的确不会因为多线程put导致死循环(1.7代码中会这样子),但是依然有其他的弊端,比如数据丢失等等.因此多线程情况下还是建议使用ConcurrentHashM ...
- [优雅代码]-调用java集合Map.computeIfAbsent()方法
java版本JDK1.8 Map是我们经常使用的,在面对复杂Map时,我们怎么更好的去维护呢? 这里的复杂Map就是<K,V>中V是一个Collection集合比如: 那么它是一个复杂Ma ...
最新文章
- Tomcat 6.0.32 +Spring dbcp datasource关闭Tomcat出现严重异常
- Google Guice使用入门
- mybati内sql查询语句在两个日期内
- html元素移动时颜色逐渐变深,css实现随鼠标移动div渐变色效果
- python给视频加水印_视频水印_Python SDK_服务端SDK_视频点播 - 阿里云
- leetcode 205. 同构字符串
- Memcache存储大数据的问题
- element ui 中 el-menu 如何添加链接router-link标签
- ssm提交post_我用spring mvc做,用post方式提交,后台获取不到参数值,用get方式就可以,什么问题...
- 不停机与停机更新_Istio的零停机滚动更新
- vb.net 与 c# 的switch ... case ...的一个重要区别
- 前端真题面试必备面试题及答案
- 没有大数据就没有智慧城市
- Note For Linux By Jes(18)-X Window 配置介绍
- 25匹马5个跑道,选出最快的5匹马?
- VMware虚拟机之安装VMware虚拟机平台
- JAVA设计模式十七--Composite(组合模式)
- 数据加工:Sql截取之间的字符串的方法
- 借力SPC,品质数据异常监控与分析仅需几分钟搞定
- 邮件发送时间怎么修改 python_怎么发送邮箱-2分钟教会你如何利用Python库定时或者批量发送电子邮件...