Java集合详解(二):Map
来源:互联网 发布:c语言字符串字符个数 编辑:程序博客网 时间:2024/05/22 10:38
Java集合详解(二):Map
Collection和Map比较
Collection<E>
- --->是一个单列的集合
Map<K, V>
- map中需要存放两个元素
- 一个是K:Key-->键
- 一个是V:Value--->Value
- ----->map是一个双列的集合
- 每一个K和V之间存在着映射关系
Map的特点:
- map的每一个对元素都是以键值对儿的形式存在的。map中的键是唯一的,只能通过键来唯一的获取值。
Map常用的方法:
1、增
put(K key, V value)putAll(Map<? extends K,? extends V> m)
2、删
clear();V remove(Object key)://移除掉Key对应的键值对,返回Key对应的Value
3、改
put(K key, V value)
4、查
get(Object key)int size();values();
5、判断:
containsKey(Object key)containsValue(Object value)isEmpty()
常用的子类
- HashTable:底层的数据结构是哈希表,K-V不可以存在null值,Hashtable是同步的 ,效率低,jdk1.0
- HashMap:底层的数据结构是哈希表,K-V可以存在null值,HashMap是不同步的 ,效率高,jdk1.2
- TreeMap:底层的数据结构是二叉树,如果要对我们的map进行排序,就是使用treemap,是按照映射关系中的key来进行排序
Map操作程序示例
public class MapDemo { public static void main(String[] args) { Map<Integer, String> map = new HashMap<Integer, String>(); //添加元素 /** * put的返回值为老版本K对应的V,如果是第一次存入,那么返回值为null */ System.out.println("1返回值=" + map.put(1, "zs")); System.out.println("2返回值=" + map.put(1, "zs007")); System.out.println("3返回值=" + map.put(2, "lisi")); System.out.println("4返回值=" + map.put(2, "lisi110")); map.put(3, "wangwu"); map.put(4, "zhaoliu"); //打印map集合 打印格式为{K1=V1, K2=V2,...Kn=Vn} System.out.println(map); //通过get(key)来获取key对应的value 当我们的key对应的值不存在,那么也就是说map当中没有这个KV对儿,返回为null String v1 = map.get(5); System.out.println("v1=" + v1); //判断containsXxx() 判断K或者V中是否存在对应的键或者值,返回值为true|false System.out.println(map.containsKey(2)); System.out.println(map.containsKey(6)); System.out.println(map.containsValue("wangwu")); System.out.println(map.containsValue("zhouqi")); //删除元素 remove 删除的时候返回值为K对应的V,如果K不在map中,不会抛异常,返回值为null String removed = map.remove(5); System.out.println("removed =" + removed); //获取所有的值values(); 值的注意的是values的返回值类型为Collection<V> Collection<String> col = map.values(); System.out.println(col); }}
Map的两种取元素方式
Set<K> keySet:
获取map中的所有的key组成一个集合Set,通过我们Set来进行操作,得到Iterator,迭代每一个元素(Key),然后在通过map.get(Key)获得对应的value。
程序示例:
import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class MapDemo { public static void main(String[] args) { Map<Integer, String> map = new HashMap<Integer, String>(); //添加元素 map.put(1, "zs1"); map.put(2, "lisi"); map.put(3, "wangwu"); map.put(4, "zhaoliu"); //获取键值对映射关系的集合entrySet Set<Map.Entry<Integer, String>> entrySet = map.entrySet(); //获取集合entrySet的迭代器 Iterator<Map.Entry<Integer, String>> it = entrySet.iterator(); //迭代每一个元素 while(it.hasNext()) { //判断是否还有下一个元素 Map.Entry<Integer, String> me = it.next(); //获取集合中映射关系元素 Integer key = me.getKey(); //得到映射元素中的key String value = me.getValue(); //得到映射元素中的value System.out.println("key=" + key + ", value=" + value); } }}
Set<Map.Entry<K,V>> entrySet:
获取map中所有的k-v的映射关系—》Set集合,通过我们Set来进行操作,得到Iterator,迭代器的每一个元素都是一个映射关系的实例,通过实例提供的api(getKey,getValue)来获取我们map中的每一对儿键值对。
程序示例:
import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class MapDemo { public static void main(String[] args) { Map<Integer, String> map = new HashMap<Integer, String>(); //添加元素 map.put(1, "zs1"); map.put(2, "lisi"); map.put(3, "wangwu"); map.put(4, "zhaoliu"); //step1、获取key对应的一个集合 Set<Integer> keySet = map.keySet(); //step2、获得keySet对应的迭代器 Iterator<Integer> it = keySet.iterator(); //step3、迭代每一个元素 while(it.hasNext()) {//判断是否有下一个元素 //3.1、获取每一个key Integer key = it.next(); String value = map.get(key); System.out.println("key=" + key + ", value=" + value); } }}
Map中两种比较器示例
Comparable接口
程序示例:
import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;/** * 业务:每一个的学生(Student)都有自己的籍贯 * 有属性:姓名name,年龄age 注意:姓名和年龄相同则视为同一个学生,需要保证学生的唯一性。 */public class MapTest1 { public static void main(String[] args) { Map<Student, String> stuMap = new HashMap<Student, String>(); stuMap.put(new Student("zhangsan", 18), "北京"); stuMap.put(new Student("lisi",19), "上海"); stuMap.put(new Student("wangwu",22), "江苏苏州"); stuMap.put(new Student("zhaoliu",24), "甘肃酒泉"); Set<Student> keySet = stuMap.keySet(); Iterator<Student> it1 = keySet.iterator(); while(it1.hasNext()) { Student stu = it1.next(); System.out.println(stu + "\t籍贯是:" + stuMap.get(stu)); } }}class Student implements Comparable<Student> { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } public Student() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int hashCode() { return name.hashCode() + age * 31; } @Override public boolean equals(Object obj) { if (null == obj) { throw new RuntimeException("元素为空,不能存进去"); } if (!(obj instanceof Student)) { throw new RuntimeException("元素不是Student类型的,不能存进去"); } Student stu = (Student)obj; return this.name.equals(stu.name) && this.age == stu.age; } @Override public String toString() { return "name="+ name + ", age=" + age; } @Override public int compareTo(Student stu) { int result = new Integer(this.age).compareTo(new Integer(stu.age)); if(result == 0) { result = this.name.compareTo(stu.name); } return result; }}
Comparator接口
程序示例:
import java.util.*;/** * 需求:对学生对象的年龄进行升序排序。(student为上一示例的student类) 按照学生姓名进行排序。---Comparator接口 * */public class MapTest2 { public static void main(String[] args) { Map<Student, String> stuMap = new TreeMap<Student, String>(new MyComparator()); stuMap.put(new Student("zhangsan",22), "江苏苏州"); stuMap.put(new Student("lisi",19), "上海"); stuMap.put(new Student("wangwu", 18), "北京"); stuMap.put(new Student("zhaolliu",24), "甘肃酒泉"); Set<Map.Entry<Student, String>> entrySet = stuMap.entrySet(); Iterator<Map.Entry<Student, String>> it2 = entrySet.iterator(); while(it2.hasNext()) { Map.Entry<Student, String> me = it2.next(); Student stu = me.getKey(); String val = me.getValue(); System.out.println(stu + "\t籍贯是:" + val); } }}class MyComparator implements Comparator<Student> { @Override public int compare(Student stu1, Student stu2) { int result = stu2.getName().compareTo(stu1.getName()); if(result == 0) { result = new Integer(stu2.getAge()).compareTo(new Integer(stu1.getAge())); } return result; }}
TreeMapTest使用示例
import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.TreeMap;/** * 需求:对"adfafea"进行统计,统计出每个字符在字符串中出现的次数, * 要求最后的打印结果为a(3)d(1)e(1)f(2) */public class TreeMapTest { public static void main(String[] args) { String result = method_count("adfafea"); System.out.println(result); } public static String method_count(String src) { char[] chs = src.toCharArray(); Map<Character, Integer> chsMap = new TreeMap<Character, Integer>(); for (int x = 0; x < chs.length; x++) { chsMap.put(chs[x], chsMap.get(chs[x]) == null ? 1 : chsMap.get(chs[x]) + 1); } StringBuilder sb = new StringBuilder(); Set<Map.Entry<Character, Integer>> entrySet = chsMap.entrySet(); Iterator<Map.Entry<Character, Integer>> it2 = entrySet.iterator(); while (it2.hasNext()) { Map.Entry<Character, Integer> me = it2.next(); char ch = me.getKey(); int count = me.getValue(); sb.append(ch + "(" + count + ")"); } return sb.toString(); }}
0 0
- Java集合详解(二):Map
- Java中的Map集合详解
- Java Map集合的详解
- Java集合详解Collection、Map
- Java中Map集合详解
- Java集合详解--什么是Map
- java集合小结(二)Map接口
- 浅谈java集合类(二)【Map】
- Java学习笔记---集合(二)Map
- 二、Java:集合,Map接口框架图
- java集合框架(二)Map
- JAVA集合详解(Collection和Map接口)
- Java SE 中map集合详解
- JAVA集合详解(Collection和Map接口)
- Java集合类详解 set、list、map、
- JAVA集合详解(Collection和Map接口)
- JAVA集合map、list、set详解
- java集合类详解二
- LeetCode *** 83. Remove Duplicates from Sorted List
- GET URL设置值为true 和'true'的区别,me和'me'的区别
- ios触摸事件和手势识别
- String、StringBuffer和StringBuilder的区别(一)
- KKT条件--约束问题最优化方法
- Java集合详解(二):Map
- SDAU 搜索专题 13 A strange lift
- 仿百度壁纸客户端(四)——自定义上拉加载实现精选壁纸墙
- Spring 之 生命周期机制混合使用
- class file解析一
- React Native环境搭建
- 常用工具类集合
- VMWare的网络三种设置方式比较
- 使用Python简单的发送邮件