Map
来源:互联网 发布:学术数据库有哪些 编辑:程序博客网 时间:2024/05/17 04:11
之前说的Collection集合是单列集合,顾名思义就是一次存储一个对象;
这次说的Map集合是双列集合,顾名思义就是一次存储两个对象,也就是一对对象;
这种情况的数据,属于一一对应的映射关系。这种关系的集合在java叫Map。
Map:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
代码演示:
package com.thz_04;import java.util.Collection;import java.util.HashMap;import java.util.Map;import java.util.Map.Entry;import java.util.Set;/* * A:删除功能 * void clear():移除集合中的所有键值对元素 * V remove(Object key):根据键移除键值对元素,并返回值 * B:判断功能 * boolean containsKey(Object key):判断集合中是否包含指定的键 * boolean containsValue(Object value):判断集合中是否包含指定的值 * boolean isEmpty():判断集合是否为空 * C:获取功能 * Set<Map.Entry<K,V>> entrySet():获取键值对对象的集合,遍历键值对对象, 利用getKey(),getValue()取出键和值(理解即可) * V get(Object key):根据键获取值 * Set<K> keySet():获取所有的键 * Collection<V> values():获取所有的值 * D:添加功能 * V put(K key,V value):集合添加键值对 * E:长度功能 * int size():键值对对数。 */public class MapDemo { public static void main(String[] args) { //创建Map,由于Map是个接口,借助HashMap Map<Integer,String > map = new HashMap<Integer,String>(); //V put(K key,V value):集合添加键值对 /*返回:以前与 key 关联的值,如果没有针对 key 的映射关系,则返回 null。 * (如果该实现支持 null 值,则返回 null 也可能表示此映射以前将 null 与 key 关联)。 */ map.put(1, "java"); map.put(2, "hello"); map.put(3, "world"); map.put(4, "C++"); map.put(5, "C++"); String put = map.put(3,"good");//覆盖了map.put(3, "world"); System.out.println(put); //int size():键值对对数。 int size = map.size(); System.out.println("长度为:"+size); //Collection<V> values():获取所有的值 Collection<String> values = map.values(); for (String string : values) { System.out.print(string+" "); } System.out.println(); //Set<K> keySet():获取所有的键 for(Integer v:map.keySet()){ System.out.print(v+" "); } System.out.println(); //Set<Map.Entry<K,V>> entrySet():获取键值对对象的集合,遍历键值对对象, Set<Entry<Integer,String>> entrySet = map.entrySet(); for(Entry<Integer,String> entry:entrySet){ System.out.println(entry.getKey()+" "+entry.getValue()); } //boolean containsKey(Object key):判断集合中是否包含指定的键 boolean containsKey = map.containsKey(1); //boolean containsValue(Object value):判断集合中是否包含指定的值 boolean containsValue = map.containsValue("C++"); //boolean isEmpty():判断集合是否为空 boolean empty = map.isEmpty(); System.out.println(containsKey+" "+containsValue+" "+empty); //V remove(Object key):根据键移除键值对元素,并返回值 String remove = map.remove(2); System.out.println(remove); //void clear():移除集合中的所有键值对元素 map.clear(); }}
遍历Map 有两种方法:
一是找出Map集合中的所有键,返回一个包含键的集合,遍历该集合,获取到键,再根据键去取出所有的值。
二是找出键值对,返回一个集合,然后遍历该集合即可
HashMap
元素顺序:元素顺序不可预测
底层算法:哈希算法
对键没有要求(仅仅相对于TreeMap来说)
在对HashMap进行存储对象时:我们发现存入(Student,String),键是同一个对象的时候要把之前存入的元素挤出去,想要实现这样的效果的话,需要重写javabean里面的hashCode()和equals()方法
代码演示:
package com.thz_05;import java.util.HashMap;import java.util.Map.Entry;import java.util.Set;public class HashMapDemo { public static void main(String[] args) { // 2.存入(String,Student)键:String(国籍) 值:Student HashMap<String, Student> hm = new HashMap<String, Student>(); //创建学生对象 Student s1 = new Student("yellowstar", 18); Student s2 = new Student("pdd", 18); Student s3 = new Student("faker", 18); //将对象存入集合 hm.put("美国", s1); hm.put("中国", s2); hm.put("韩国", s3); //同过键找值 Set<String> keys = hm.keySet(); for (String key : keys) { System.out.println(key+" "+hm.get(key)); } System.out.println("--------------------"); //通过键值对 Set<Entry<String,Student>> entrySet = hm.entrySet(); for (Entry<String, Student> entry : entrySet) { System.out.println(entry.getKey()+" "+entry.getValue()); } }}
Treemap
元素顺序:元素顺序与键的排序规则有关
底层算法:Tree算法
代码演示:
package com.buchong_08;import java.util.Map.Entry;import java.util.TreeMap;//存入(Integer,String),主要验证排序方式public class TreeMapDemo { public static void main(String[] args) { //创建Map集合 TreeMap<Integer, String> tm = new TreeMap<>(); tm.put(1, "teg"); tm.put(4, "ccz"); tm.put(3, "lr"); tm.put(2, "tt"); //遍历 for(Integer i:tm.keySet()){ System.out.println(i+" "+tm.get(i)); } System.out.println("----------------"); for(Entry<Integer, String> entry:tm.entrySet()){ System.out.println(entry.getKey()+" "+entry.getValue()); } }}
总结:HashMap与TreeMap的相同点与不同点
相同点:主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。
不同点:
1.HashMap里面存入的键值对在取出的时候是随机的,也是我们最常用的一个Map.根据键可以直接获取它的值,
具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。
2.TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
- map
- MAP
- map
- MAP
- map
- map
- map
- Map
- Map
- Map
- map
- map
- Map
- .map
- map
- MAP
- map
- Map
- c++类的继承:私有继承,公有继承,保护继承
- 数据结构之线性表——中缀表达式和后缀表达式(栈的应用)
- Java web 乱码问题过滤器的正确设置
- [leetcode: Python]231. Power of Two
- VS中的sln文件
- Map
- ARM 按键控制LED灯+IO控制buzzer蜂鸣器
- Ubuntu16.04下安装sublime text3
- 算法优化的神奇效果
- 设计模式:对象去耦(中介者,观察者)
- 如何在Kubernetes中暴露服务访问
- The annotation @ResponseBody is disallowed for this location
- 百度脑图-便捷的思维工具
- 9——提取不重复的整数