标签:个数 void out 常用方法 ann 字符串转换 链表 接口 import
现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即 java.util.Map 接口。
代码举例
package demo01; import java.util.HashMap; import java.util.Map; public class MapMethod { public static void main(String[] args) { //多态 Map<String, Integer> map = new HashMap<>(); /*添加数据 key 不存在则添加对应的value值 key 存在则key对应的值替换原来的key对应的值 */ map.put("张三", 19); map.put("李四", 20); map.put("张三", 21); map.put("王五", 22); System.out.println(map); /* * 根据key获取key对应的值.对集合没有影响 * key 存在则获取对应的value * key 不存在在返回value * */ System.out.println(map.get("a")); System.out.println(map.get("李四")); System.out.println(map); ; /*根据key删除对应的数据。 key 不存在则对集合不产生影响,返回null * key 存在,在删除并且返回key对应的value值 * * */ System.out.println(map.remove("张三")); System.out.println(map); //containskey(object key ):判断集合中是否包含指定的 key.包含返回true.不包含返回false System.out.println(map.containsKey("王五")); System.out.println(map.containsKey("sda")); } }
执行结果
方式一:Map集合遍历键找值
键找值方式:即通过元素中的键,获取键所对应的值
分析步骤:
1. 获取Map中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键。使用方法: keyset()
2. 遍历键的Set集合,得到每一个键。迭代器或者增强for
3. 根据键,获取键所对应的值。方法提示: get(K key)
代码举例
package demo01; import java.util.HashMap; import java.util.Map; import java.util.Set; public class demo02Map { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("张三", 19); map.put("李四", 20); map.put("张三", 21); map.put("王五", 22); // 使用keySet获取集合中所有的key,存储到一个set集合中 Set<String> key = map.keySet(); // 遍历set集合 获取所有的key for (String i : key) { String s = i; // 通过get方法获取所有的元素 System.out.println(map.get(s)); } } }
执行结果
方式二:键值对方式:即通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。
我们已经知道, Map 中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在 Map 中是一一对应关
系,这一对对象又称做 Map 中的一个 Entry(项) 。 Entry 将键值对的对应关系封装成了对象。即键值对对象,这
样我们在遍历 Map 集合时,就可以从每一个键值对( Entry )对象中获取对应的键与对应的值。
既然Entry表示了一对键和值,那么也同样提供了获取对应键和对应值得方法:
在Map集合中也提供了获取所有Entry对象的方法:
操作步骤
1. 获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。方法提示: entrySet() 。
2. 遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象。
3. 通过键值对(Entry)对象,获取Entry对象中的键与值。 方法提示: getkey() getValue
代码举例
package demo01; import java.util.HashMap; import java.util.Map; import java.util.Set; public class demo03map { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("1", "苹果1"); map.put("2", "苹果2"); map.put("3", "苹果3"); map.put("4", "苹果4"); // 获取entry 对象 Set<Map.Entry<String, String>> set = map.entrySet(); // 遍历set 集合 获取每一个set集合 for (Map.Entry<String, String> entry : set) { // 获取key 和value System.out.println("key" + entry.getKey() + "对应的value" + entry.getValue()); } } }
执行结果、
当给HashMap中存放自定义对象时,如果自定义对象作为key存在,这时要保证对象唯一,必须复写对象的hashCode和equals方法
如果要保证map中存放的key和取出的顺序一致,可以使用 java.util.LinkedHashMap 集合来存放。
我们知道HashMap保证成对元素唯一,并且查询速度很快,可是成对元素存放进去是没有顺序的,那么我们要保证有序,还要速度快怎么办呢?
在HashMap下面有一个子类LinkedHashMap,它是链表和哈希表组合的一个数据存储结构
分析:
代码实现
package demo01; import java.util.HashMap; import java.util.Map; import java.util.Scanner; import java.util.Set; public class demo03MapTest { public static void main(String[] args) { System.out.println("请输入你要计算的字符串"); String next = new Scanner(System.in).next(); // 创建map对象。利用key唯一性 Map<Character, Integer> map = new HashMap<>(); // 字符串转换为数组 char[] c = next.toCharArray(); //遍历数组 for (char i : c) { if (map.containsKey(i)) { Integer integer = map.get(i); integer++; map.put(i, integer); } else { map.put(i, 1); } } //遍历map集合 for (Map.Entry<Character, Integer> entry : map.entrySet()) { System.out.println(("字符" + entry.getKey() + "对应的数量 " + entry.getValue())); } } }
执行结果
标签:个数 void out 常用方法 ann 字符串转换 链表 接口 import
原文地址:https://www.cnblogs.com/wurengen/p/10797107.html