(五)、Java复习笔记之Map集合
来源:互联网 发布:mac用pe安装win7系统 编辑:程序博客网 时间:2024/05/18 20:07
集合继承体系图
64、Map集合
- 概述
- 将键映射到值的对象
- 一个映射不能包含重复的键
- 每个键最多只能映射到一个值
- Map接口和Collection接口的不同
- Map是双列的,Collection是单列的
- Map的键唯一,Collection的子体系Set是唯一的
- Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效
- 成员方法
- V put(K key,V value):添加元素。
- 如果键是第一次存储,就直接存储元素,返回null
- 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
- void clear():移除所有的键值对元素
- V remove(Object key):根据键删除键值对元素,并把值返回
- boolean containsKey(Object key):判断集合是否包含指定的键
- boolean containsValue(Object value):判断集合是否包含指定的值
- boolean isEmpty():判断集合是否为空
- Set< Map.Entry< K,V>> entrySet():返回此映射中包含的映射关系的 Set 视图。
- V get(Object key):根据键获取值
- Set< K> keySet():获取集合中所有键的集合
- Collection values():获取集合中所有值的集合
- int size():返回集合中的键值对的个数
- V put(K key,V value):添加元素。
Map集合的遍历之键找值
HashMap<String, Integer> hm = new HashMap<>();hm.put("张三", 23);hm.put("李四", 24);hm.put("王五", 25);hm.put("赵六", 26);/*Set<String> keySet = hm.keySet(); //获取集合中所有的键Iterator<String> it = keySet.iterator(); //获取迭代器while(it.hasNext()) { //判断单列集合中是否有元素 String key = it.next(); //获取集合中的每一个元素,其实就是双列集合中的键 Integer value = hm.get(key); //根据键获取值 System.out.println(key + "=" + value); //打印键值对}*/for(String key : hm.keySet()) { //增强for循环迭代双列集合第一种方式 System.out.println(key + "=" + hm.get(key));}
Map集合的遍历之键值对对象找键和值
HashMap<String, Integer> hm = new HashMap<>();hm.put("张三", 23);hm.put("李四", 24);hm.put("王五", 25);hm.put("赵六", 26);/*Set<Entry<String, Integer>> entrySet = hm.entrySet(); //获取所有的键值对象的集合Iterator<Entry<String, Integer>> it = entrySet.iterator();//获取迭代器while(it.hasNext()) { Entry<String, Integer> en = it.next(); //获取键值对对象 String key = en.getKey(); //根据键值对对象获取键 Integer value = en.getValue(); //根据键值对对象获取值 System.out.println(key + "=" + value);}*/for(Entry<String,Integer> en : hm.entrySet()) { System.out.println(en.getKey() + "=" + en.getValue());}
65、HashMap类
- 概述
- key值的数据结构与HashSet类似,无序(存和取的顺序不一致),无索引,不允许重复存储。HashSet实际上由HashMap实现。
实例
public class Test { public static void main(String[] args) { HashMap<Student, String> hm = new HashMap<>(); hm.put(new Student("张三", 23), "北京"); hm.put(new Student("张三", 23), "上海"); hm.put(new Student("李四", 24), "广州"); hm.put(new Student("王五", 25), "深圳"); System.out.println(hm); //{Student [name=李四, age=24]=广州, Student [name=张三, age=23]=上海, Student [name=王五, age=25]=深圳} }}class Student { private String name; private int age; //getters and setters, constructor @Override public int hashCode() { int result = 17; result = 31 * result + name.hashCode(); result = 31 * result + age; return result; } @Override public boolean equals(Object obj) { if(this == obj) return true; if(!(obj instanceof Student)) return false; Student stu = (Student)obj; return stu.getName().equals(name) && stu.getAge() == age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; }}
66、LinkedHashMap类
- 概述
- 底层是链表实现的可以保证怎么存就怎么取
实例
LinkedHashMap<String, Integer> lhm = new LinkedHashMap<>();lhm.put("张三", 23);lhm.put("李四", 24);lhm.put("赵六", 26);lhm.put("王五", 25);System.out.println(lhm);//{张三=23, 李四=24, 赵六=26, 王五=25}
67、TreeMap类
- 概述
- 基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
- 对照TreeSet
实例
public class Test {public static void main(String[] args) {// demo1(); TreeMap<Student, String> tm = new TreeMap<>(new Comparator<Student>() { @Override public int compare(Student s1, Student s2) { int num = s1.getName().compareTo(s2.getName()); //按照姓名比较 return num == 0 ? s1.getAge() - s2.getAge() : num; } }); tm.put(new Student("张三", 23), "北京"); tm.put(new Student("李四", 13), "上海"); tm.put(new Student("赵六", 43), "深圳"); tm.put(new Student("王五", 33), "广州"); System.out.println(tm); } public static void demo1() { TreeMap<Student, String> tm = new TreeMap<>(); tm.put(new Student("张三", 23), "北京"); tm.put(new Student("李四", 13), "上海"); tm.put(new Student("王五", 33), "广州"); tm.put(new Student("赵六", 43), "深圳"); System.out.println(tm); }}class Student implements Comparable<Student>{ private String name; private int age; //getters and setters, constructor @Override public int hashCode() { int result = 17; result = 31 * result + name.hashCode(); result = 31 * result + age; return result; } @Override public boolean equals(Object obj) { if(this == obj) return true; if(!(obj instanceof Student)) return false; Student stu = (Student)obj; return stu.getName().equals(name) && stu.getAge() == age; } @Override public int compareTo(Student o) { int num = this.age - o.age; return num == 0 ? this.name.compareTo(o.name) : num; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; }}
统计字符串中每个字符出现的次数
String str = "aaaabbbcccccccccc";char[] arr = str.toCharArray(); HashMap<Character, Integer> hm = new HashMap<>();for(char c : arr) { if(!hm.containsKey(c)) { hm.put(c, 1); }else { hm.put(c, hm.get(c) + 1); }}for (Character key : hm.keySet()) { System.out.println(key + "=" + hm.get(key));}
68、HashMap和Hashtable的区别
- 执行速度:HashMap > Hashtable
- Hashtable线性安全,效率低、HashMap线性不安全,效率高。
- Hashtable不可以存储null键和null值,HashMap可以存储null键和null值。
- Hashtable已被HashMap取代。
69、Collections工具类
- 概述
- 针对集合操作的工具类
- 成员方法
public static < T > void sort(List< T > list,Comparator< ? super T> c) //根据指定比较器产生的顺序对指定列表进行排序。
public static < T > int binarySearch(List< ? > list,T key) //使用二分搜索法搜索指定列表,以获得指定对象。
public static < T > T max(Collection< ? > coll) //根据元素的自然顺序,返回给定 collection 的最大元素。
public static void reverse(List< ? > list) //反转指定列表中元素的顺序。
public static void shuffle(List< ? > list) //使用默认随机源对指定列表进行置换(洗牌操作)。 实例
(1)模拟斗地主洗牌和发牌,牌没有排序
//买一副扑克String[] num = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};String[] color = {"方片","梅花","红桃","黑桃"};ArrayList<String> poker = new ArrayList<>();for(String s1 : color) { for(String s2 : num) { poker.add(s1.concat(s2)); }}poker.add("小王");poker.add("大王");//洗牌Collections.shuffle(poker);//发牌ArrayListString> gaojin = new ArrayList<>(); //人物1ArrayList<String> longwu = new ArrayList<>(); //人物2ArrayList<String> me = new ArrayList<>(); //人物3ArrayList<String> dipai = new ArrayList<>(); //三张底牌 for(int i = 0; i < poker.size(); i++) { if(i >= poker.size() - 3) { dipai.add(poker.get(i)); }else if(i % 3 == 0) { gaojin.add(poker.get(i)); }else if(i % 3 == 1) { longwu.add(poker.get(i)); }else { me.add(poker.get(i)); }}//看牌System.out.println(gaojin);System.out.println(longwu);System.out.println(me);System.out.println(dipai);
(2)模拟斗地主洗牌和发牌并对牌进行排序
public class Test { public static void main(String[] args) { //买一副牌 String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"}; String[] color = {"方片","梅花","红桃","黑桃"}; HashMap<Integer, String> hm = new HashMap<>(); //存储索引和扑克牌,索引值小的牌面也小 ArrayList<Integer> list = new ArrayList<>(); //存储索引,操作索引就ok int index = 0; //索引的开始值 for(String s1 : num) { for(String s2 : color) { hm.put(index, s2.concat(s1)); //将索引和扑克牌添加到HashMap中 list.add(index); //将索引添加到ArrayList集合中 index++; } } hm.put(index, "小王"); list.add(index); index++; hm.put(index, "大王"); list.add(index); //洗牌 Collections.shuffle(list); //发牌 TreeSet<Integer> gaojin = new TreeSet<>(); TreeSet<Integer> longwu = new TreeSet<>(); TreeSet<Integer> me = new TreeSet<>(); TreeSet<Integer> dipai = new TreeSet<>(); for(int i = 0; i < list.size(); i++) { if(i >= list.size() - 3) { dipai.add(list.get(i)); //将list集合中的索引添加到TreeSet集合中会自动排序 }else if(i % 3 == 0) { gaojin.add(list.get(i)); }else if(i % 3 == 1) { longwu.add(list.get(i)); }else { me.add(list.get(i)); } } //看牌 lookPoker("高进", gaojin, hm); lookPoker("龙五", longwu, hm); lookPoker("冯佳", me, hm); lookPoker("底牌", dipai, hm); } public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer, String> hm) { System.out.print(name + "的牌是:"); for (Integer index : ts) { System.out.print(hm.get(index) + " "); } System.out.println(); }}高进的牌是:方片3 黑桃3 梅花4 黑桃4 方片6 梅花6 梅花7 红桃7 梅花8 黑桃9 梅花10 红桃10 梅花J 黑桃Q 梅花K 黑桃K 梅花A 龙五的牌是:梅花3 方片4 黑桃6 方片7 黑桃7 红桃8 黑桃8 梅花9 红桃9 黑桃10 方片J 黑桃J 方片K 黑桃A 梅花2 红桃2 小王 冯佳的牌是:红桃3 红桃4 方片5 梅花5 红桃5 方片8 方片9 红桃J 方片Q 梅花Q 红桃Q 红桃K 方片A 红桃A 方片2 黑桃2 大王 底牌的牌是:黑桃5 红桃6 方片10
阅读全文
1 0
- (五)、Java复习笔记之Map集合
- Java基础复习之遍历Map集合
- Java笔记集合之Map
- JAVA基础复习(五)Map扩展
- (四)、Java复习笔记之Collection集合
- Java复习笔记——Map运用(检测Random特性,多维集合,二叉树实现)
- Java集合框架复习之规则集Set-TreeSet(五)
- 黑马程序员-java集合笔记之map
- Java学习笔记之集合Collection&Map
- Java学习笔记之集合、Iterator、Map
- JAVA复习之集合~~
- java复习之集合
- JAVA复习笔记--------类(五)多态
- Java集合之五Map、HashMap、LinkedHashMap、TreeMap、Properties
- java笔记 Map集合
- Java笔记 - Map集合
- [学习笔记]Java集合框架之Map集合
- [学习笔记]Java集合框架之Map集合
- 一个获取鼠标位置和键盘按钮的图形化界面一个 工程文件
- 从体测到健康问题的思考转变
- Go语言实现二叉搜索树
- Android杂谈--闹钟详谈
- Atcoder Regular Contest 066 F genocide【JZOJ5451】
- (五)、Java复习笔记之Map集合
- Linux 下的磁盘的格式化和挂载
- 卷积神经网络入门详解
- You Only Look Once: Unified, Real-Time Object Detection
- 11.5
- QString与std::string的相互转换
- java se--2.数组-3.常见算法
- WIN7下创建tensorflow环境[Anaconda3-4.2.0+tensorflow(gpu/cpu)+pycharm]
- magento中常用知识点