Map集合
来源:互联网 发布:禁止在淘宝网上出售 编辑:程序博客网 时间:2024/05/20 11:24
一、Map映射容器:
Map(映射)是一个可以根据键值进行存储的,它的一个 Key 对应的是一个存储的位置,所以Key值是唯一的,根据Key值可以获取到对应的存储的Value。
这种存储的集合我们称为 “键-值” Map。
1)它不是集合Collection的子类;
2) 它的键值是唯一的,根据键值可以取出值;
3) 根据值无法直接取出Key。
二、Map的几种实现方式
同样的对于Map接口是有多种实现方式的:
(1)HashMap 按照散列存储,这样的存取较快,线程不安全的,允许存放null键,null值
(2)Hashtable 线程安全,速度慢,不允许存放null键,null值
(3)TreeMap 使用二叉树的算法来实现键值的自然排序功能。
Map的遍历:
package com.javatest;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Set;public class MapTest {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put("语文", "95分");map.put("数学", "80分");Set<Entry<String, String>> set = map.entrySet();Iterator iterator = set.iterator();//map的遍历while (iterator.hasNext()) {Entry<String, String> entry = (Entry<String, String>) iterator.next();System.out.println(entry.getKey() + entry.getValue());}}}
三、对Map键值的要求:map的键值是唯一的,如果两次添加etity的键值相同,后面的会覆盖前面的。这就对键值的实现有一定的要求。
(Map也拥有很多实用的操作方法,如:containsKey(Object key)、equals(Object o)等,如果判断的对象是自定义的对象,需要正确重写equals和hashCode方法才能满足我们想要的结果。Map的键值可以用自定义对象,如Map<Employee,Integer> Employee需正确实现equals和HashCode。
Set中存储自定义对象时,为保证数据相同的不重复存储;List,Set使用操作contains等方法查询自定义对象时;都需要正确实现equals和HashCode。由此可见equals和hashCode方法的重要性。)
1、hashMap和Hashtable对键值的要求:正确重写equals和hashcode方法
例:
实体类Person(没有正确重写equals和hashCode方法):
package map;public class Person {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Person [name=" + name + "]";}}
这时编写测试类:
package map;import java.util.HashMap;import java.util.Map;public class MyhashMap {public static void main(String[] args) {Map<Person, Integer> map=new HashMap<>();Person person=new Person();person.setName("zs");map.put(person, 20);person=new Person();person.setName("zs");map.put(person, 20);//Person key=new Person();//key.setName("zs");System.out.println(map.size());}}
输出为2;而如果将Person类正确重写了equals和hashCode方法,再次编译输出1。hashTable也是这种情况。
2、TreeMap对键值的要求是,这个键值需要实现排序接口Comparable。
例:
package map;public class Person1 implements Comparable<Person1>{private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Person [name=" + name + "]";}@Overridepublic int compareTo(Person1 o) {// TODO Auto-generated method stubreturn this.name.compareTo(o.name);}}测试类:
package map;import java.util.Map;import java.util.TreeMap;public class MyTreeMap {public static void main(String[] args) {Map<Person1, Integer> map=new TreeMap<>();Person1 person=new Person1();person.setName("zs");map.put(person, 1);person=new Person1();person.setName("zs");map.put(person, 2);//Person1 key=new Person1();//key.setName("zs");System.out.println(map.size());}}输出1,因为这两个name相等,认为这是一个对象。其实compareTo就是一种变向的去重复。
- Map 集合
- Map集合
- Map集合
- map集合
- Map集合
- map集合
- Map集合
- Map集合
- Map集合
- Map集合
- Map集合
- map集合
- Map集合
- Map集合
- Map集合
- Map集合
- Map集合
- Map集合
- List集合
- Android仿天猫搜索历史记录显示自定义布局
- Azure Stack深入浅出2:Azure Stack与Azure的有QoS保证的网络联通实现方法和对比测试
- 1103: [POI2007]大都市meg
- 在外部tomcat中运行spring boot应用
- Map集合
- G
- MySQL创建表 错误代码1064
- java面试题:制造回文字符串
- Spark踩坑记——Spark Streaming+Kafka
- 多维数组使用递归方法获取全排列组合
- hdu 6043
- Java_基础—获取文本上字符出现的次数
- 【洛谷P3808】【模版】AC自动机(简单版)