Java--集合框架--Map集合、 HashMap和Hashtable的区别、 Collections(集合工具类)
Map集合
HashMap和Hashtable的区别
Collections(集合工具类)
集合练习
模拟斗地主(洗牌,发牌,看牌)
集合框架(Map集合概述和特点)
A: 需求: 根据学号获取学生姓名
public class MyTest {public static void main(String[] args) {ArrayList<String> list= new ArrayList<>();list.add("s001------张三");list.add("s002------李四");list.add("s003------王五");list.add("s004------赵六");String s = list.get(0);String[] strings = s.split("[-]+");System.out.println(strings[0]);System.out.println(strings[1]);}
}B:Map接口概述查看API可以知道:将键映射到值的对象一个映射不能包含重复的键每个键最多只能映射到一个值
C:Map接口和Collection接口的不同Map是双列的,Collection是单列的Map的键唯一,Collection的子体系Set是唯一的Map集合的数据结构针对键有效,跟值无关;Collection集合的数据结构是针对元素有效
集合框架(Map集合的功能概述)
A:Map集合的功能概述a:添加功能 V put(K key,V value):添加元素。这个其实还有另一个功能?替换如果键是第一次存储,就直接存储元素,返回null如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值b:删除功能void clear():移除所有的键值对元素V remove(Object key):根据键删除键值对元素,并把值返回c:判断功能boolean containsKey(Object key):判断集合是否包含指定的键boolean containsValue(Object value):判断集合是否包含指定的值boolean isEmpty():判断集合是否为空d:获取功能Set<Map.Entry<K,V>> entrySet(): 返回一个键值对的Set集合V get(Object key):根据键获取值Set<K> keySet():获取集合中所有键的集合Collection<V> values():获取集合中所有值的集合e:长度功能int size():返回集合中的键值对的对数
集合框架(Map集合的基本功能测试)
A:案例演示
Map集合的基本功能:V put(K key,V value) V remove(Object key)void clear()boolean containsKey(Object key)boolean containsValue(Object value)boolean isEmpty()int size()public class MyTest {public static void main(String[] args) {HashMap<String, String> hm = new HashMap<>();String s = hm.put("文章", "马伊琍");hm.put("贾乃亮","李小璐");hm.put("王宝强","马蓉");hm.put("陈羽凡","白百何");hm.put("王大治","董洁");hm.put("武大郎","潘金莲");hm.remove("武大郎");// hm.clear();System.out.println(hm);boolean empty = hm.isEmpty();int size = hm.size();System.out.println(hm.containsKey("贾乃亮"));System.out.println(hm.containsValue("潘金莲"));}
}
集合框架(Map集合的获取功能测试)
A:案例演示
V get(Object key)Set<K> keySet()Collection<V> values()public class MyTest {public static void main(String[] args) {HashMap<String, String> hm = new HashMap<>();String s = hm.put("文章", "马伊琍");hm.put("贾乃亮","李小璐");hm.put("王宝强","马蓉");hm.put("陈羽凡","白百何");hm.put("王大治","董洁");hm.put("武大郎","潘金莲");String value = hm.get("文章");System.out.println(value);Set<String> strings = hm.keySet();for (String string : strings) {System.out.println(string+"=="+hm.get(string));}Collection<String> values = hm.values();System.out.println(values); }
}
集合框架(Map集合的遍历之键找值)
A:键找值思路:获取所有键的集合遍历键的集合,获取到每一个键根据键找值
B:案例演示Map集合的遍历之键找值
public class MyTest {public static void main(String[] args) {HashMap<String, String> hm = new HashMap<>();String s = hm.put("文章", "马伊琍");hm.put("贾乃亮","李小璐");hm.put("王宝强","马蓉");hm.put("陈羽凡","白百何");hm.put("王大治","董洁");hm.put("武大郎","潘金莲");Set<Map.Entry<String, String>> entries = hm.entrySet();for (Map.Entry<String, String> entry : entries) {String key = entry.getKey();String value = entry.getValue();System.out.println(key+"=="+value);}}
}
集合框架(Map集合的遍历之键值对对象找键和值)
A:键值对对象找键和值思路:获取所有键值对对象的集合遍历键值对对象的集合,获取到每一个键值对对象根据键值对对象找键和值
B:案例演示Map集合的遍历之键值对对象找键和值
public class MyTest {public static void main(String[] args) {HashMap<String, Student> hashMap = new HashMap<>();hashMap.put("s001",new Student("张三",23));hashMap.put("s002",new Student("张三",23));hashMap.put("s003",new Student("李四",21));hashMap.put("s004",new Student("王五",18));hashMap.put("s005",new Student("赵六",20));hashMap.put("s006",new Student("田七",17));Set<String> strings = hashMap.keySet();for (String string : strings) {Student student = hashMap.get(string);System.out.println(string+"=="+student.getName()+"=="+student.getAge());}Set<Map.Entry<String, Student>> entries = hashMap.entrySet();for (Map.Entry<String, Student> entry : entries) {String key = entry.getKey();Student value = entry.getValue();System.out.println(key+"=="+value);}}
}
集合框架(HashMap集合键是Stirng值是String的案例)(掌握)
HashMap 允许插入null键 null值
A:案例演示: HashMap集合键是Stirng值是String的案例
public class MyTest {public static void main(String[] args) {HashMap<String, String> hm = new HashMap<>();String s = hm.put("文章", "马伊琍");System.out.println(s);String s1 = hm.put("文章", "姚笛");System.out.println(s1);hm.put("贾乃亮","李小璐");hm.put("王宝强","马蓉");hm.put("陈羽凡","白百何");hm.put("王大治","董洁");hm.put("武大郎","潘金莲");System.out.println(hm);}
}
集合框架(HashMap集合键是String值是Student的案例)
A:案例演示: HashMap集合键是String值是Student的案例
public class MyTest {public static void main(String[] args) {HashMap<String, Student> hashMap = new HashMap<>();hashMap.put("s001",new Student("张三",23));hashMap.put("s002",new Student("张三",23));hashMap.put("s003",new Student("李四",21));hashMap.put("s004",new Student("王五",18));hashMap.put("s005",new Student("赵六",20));hashMap.put("s006",new Student("田七",17));System.out.println(hashMap);}
}
集合框架(HashMap集合键是Student值是String的案例)
键唯一 注意重写hashCode方法 和 equals 方法
A:案例演示: HashMap集合键是Student值是String的案例
集合框架(LinkedHashMap的概述和使用)
A:LinkedHashMap的概述: Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序
B:LinkedHashMap的特点: 底层的数据结构是链表和哈希表 元素有序 并且唯一元素的有序性由链表数据结构保证 唯一性由 哈希表数据结构保证Map集合的数据结构只和键有关
C:案例演示: LinkedHashMap的特点
public class MyTest {public static void main(String[] args) {LinkedHashMap<String, String> map= new LinkedHashMap<>();map.put("文章", "马伊琍");map.put("贾乃亮","李小璐");map.put("王宝强","马蓉");map.put("陈羽凡","白百何");map.put("王大治","董洁");map.put("武大郎","潘金莲");map.forEach(new BiConsumer<String, String>() {@Overridepublic void accept(String key, String value) {System.out.println(key+"=="+value);}});}
}
集合框架(TreeMap集合键是String值是String的案例)
TreeMap 键不允许插入null
A: TreeMap: 键的数据结构是红黑树,可保证键的排序和唯一性 排序分为自然排序和比较器排序 线程是不安全的效率比较高
B:案例演示: TreeMap集合键是Integer值是String的案例
public class TreeMapDemo {public static void main(String[] args) {TreeMap<Integer, String> treeMap = new TreeMap<>();treeMap.put(1,"aaa");treeMap.put(18,"ccc");treeMap.put(23,"ddd");treeMap.put(4,"ooo");treeMap.put(85,"kkk");treeMap.forEach(new BiConsumer<Integer, String>() {@Overridepublic void accept(Integer key, String s) {System.out.println(key);}});}
}
集合框架(TreeMap集合键是Student值是String的案例)
A:案例演示: TreeMap集合键是Student值是String的案例按照年龄大小进行排序 注意键要实现Comparable 接口
public class MyTest {public static void main(String[] args) {TreeMap<Student, String> treeMap = new TreeMap<>();treeMap.put(new Student("张三",20),"s001");treeMap.put(new Student("张三2",19),"s002");treeMap.put(new Student("李四",22),"s003");treeMap.put(new Student("王五",18),"s004");treeMap.put(new Student("赵六",21),"s005");treeMap.put(new Student("田七",23),"s006");treeMap.put(new Student("一一",18),"s007");//System.out.println(treeMap);treeMap.forEach(new BiConsumer<Student, String>() {@Overridepublic void accept(Student student, String s) {System.out.println(student.getName()+"=="+student.getAge());}});}
}
集合框架(统计字符串中每个字符出现的次数)
A:案例演示: 需求:统计字符串中每个字符出现的次数"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)
public class MyTest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入一段字符串");String str = sc.nextLine();HashMap<Character, Integer> map = new HashMap<>();for (int i = 0; i < str.length(); i++) {char ch = str.charAt(i);if (!map.containsKey(ch)){map.put(ch,1);}else {Integer integer = map.get(ch);integer++;map.put(ch,integer);}}StringBuilder sb = new StringBuilder();map.forEach(new BiConsumer<Character, Integer>() {@Overridepublic void accept(Character character, Integer integer) {sb.append(character).append("(").append(integer).append(")");}});String string = sb.toString();System.out.println(string);}
}
集合框架(集合嵌套之HashMap嵌套HashMap)
A:案例演示集合嵌套之HashMap嵌套HashMap基础班
张三 20
李四 22
就业班
王五 21
赵六 23public class MyTest {public static void main(String[] args) {HashMap<String, Integer> jcMap = new HashMap<>();jcMap.put("张三",20);jcMap.put("李四",22);HashMap<String, Integer> jyMap = new HashMap<>();jyMap.put("王五",21);jyMap.put("赵六",23);HashMap<String, HashMap<String, Integer>> maxMap = new HashMap<>();maxMap.put("基础班",jcMap);maxMap.put("就业班",jyMap);Set<String> strings = maxMap.keySet();for (String string : strings) {System.out.println(string);HashMap<String, Integer> stringIntegerHashMap = maxMap.get(string);Set<String> strings1 = stringIntegerHashMap.keySet();for (String s : strings1) {System.out.println("\t"+s+"\t"+stringIntegerHashMap.get(s));}System.out.println();}}
}
集合框架(集合嵌套之HashMap嵌套ArrayList)
A:案例演示集合嵌套之HashMap嵌套ArrayList假设HashMap集合的元素是ArrayList。有3个。每一个ArrayList集合的值是字符串。三国演义吕布周瑜笑傲江湖令狐冲林平之神雕侠侣郭靖杨过 public class MyTest {public static void main(String[] args) {ArrayList<String> sgList = new ArrayList<>();sgList.add("吕布");sgList.add("周瑜");ArrayList<String> xaList = new ArrayList<>();xaList.add("令狐冲");xaList.add("林平之");ArrayList<String> sdList = new ArrayList<>();sdList.add("尹志平");sdList.add("郭靖");HashMap<String, ArrayList<String>> maxMap = new HashMap<>();maxMap.put("三国演义",sgList);maxMap.put("笑傲江湖",xaList);maxMap.put("神雕侠侣",sdList);Set<Map.Entry<String, ArrayList<String>>> entries = maxMap.entrySet();for (Map.Entry<String, ArrayList<String>> entry : entries) {String key = entry.getKey();System.out.println(key);ArrayList<String> list = entry.getValue();for (String s : list) {System.out.println("\t"+s);}System.out.println();}}
}
集合框架(集合嵌套之ArrayList嵌套HashMap)
A:案例演示集合嵌套之ArrayList嵌套HashMap假设ArrayList集合的元素是HashMap。有3个。每一个HashMap集合的键和值都是字符串。周瑜---小乔吕布---貂蝉郭靖---黄蓉杨过---小龙女令狐冲---任盈盈林平之---岳灵珊public class MyTest {public static void main(String[] args) {HashMap<String, String> sgmap = new HashMap<>();sgmap.put("周瑜","小乔");sgmap.put("吕布","貂蝉");HashMap<String, String> sdmap = new HashMap<>();sdmap.put("郭靖","黄蓉");sdmap.put("杨过","小龙女");sdmap.put("杨过","郭襄");HashMap<String, String> xamap = new HashMap<>();xamap.put("令狐冲","任盈盈");xamap.put("林平之","岳灵珊");ArrayList<HashMap<String, String>> maxList = new ArrayList<>();maxList.add(sgmap);maxList.add(sdmap);maxList.add(xamap);for (HashMap<String, String> map : maxList) {Set<Map.Entry<String, String>> entries = map.entrySet();for (Map.Entry<String, String> entry : entries) {String key = entry.getKey();String value = entry.getValue();System.out.println(key+"--"+value);}System.out.println();}}
}
集合框架(HashMap和Hashtable的区别)
A:HashMap和Hashtable的区别: HashMap: 线程不安全,效率高.允许null值和null键Hashtable: 线程安全 , 效率低.不允许null值和null键
B:案例演示 HashMap和Hashtable的区别
public class MyTest5 {public static void main(String[] args) {HashMap<String, String> map = new HashMap<>();map.put(null,null);System.out.println(map);/* Hashtable<Object, Object> objectObjectHashtable = new Hashtable<>();objectObjectHashtable.put(null,null);*/}
}
集合框架(Collections工具类的概述和常见方法讲解)
A:Collections类概述: 针对集合操作 的工具类
B:Collections成员方法public static <T> void sort(List<T> list): 排序,默认按照自然顺序public static <T> int binarySearch(List<?> list,T key): 二分查找public static <T> T max(Collection<?> coll): 获取最大值public static void reverse(List<?> list): 反转public static void shuffle(List<?> list): 随机置换
C:案例演示: Collections工具类的常见方法讲解
public class MyTest {public static void main(String[] args) {ArrayList<Integer> integers = new ArrayList<>();integers.add(20);integers.add(27);integers.add(40);integers.add(100);int i = Collections.binarySearch(integers, 20);System.out.println(i);Collections.sort(integers, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return 0;}});Integer max = Collections.max(integers);System.out.println(max);Integer min = Collections.min(integers);System.out.println(min);Collections.shuffle(integers);System.out.println(integers);}
}
集合框架(模拟斗地主洗牌和发牌)
A:案例演示: 模拟斗地主洗牌和发牌,牌没有排序
public class MyTest {public static void main(String[] args) {ArrayList<String> pokerBox = new ArrayList<>();String[] colors={"♥","♠","♣","♦"};String[] num={"A","1","2","3","4","5","6","7","8","9","10","J","Q","K"};for (String color : colors) {for (String s : num) {pokerBox.add(color.concat(s));}}pokerBox.add("☀");pokerBox.add("
Java--集合框架--Map集合、 HashMap和Hashtable的区别、 Collections(集合工具类)相关推荐
- 【Java集合之Map】HashMap、HashTable、TreeMap、LinkedHashMap区别
Java为数据结构中的映射定义了一个接口java.util.Map,它有四个实现类,分别是HashMap.HashTable.LinkedHashMap和TreeMap.本节实例主要介绍这4中实例的用 ...
- 18.集合框架(Map集合,HashMap和Hashtable的区别,Collections(集合工具类),集合练习,模拟斗地主(洗牌,发牌,看牌))
1.Map集合概述和特点 1.需求: 根据学号获取学生姓名 2.Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能 ...
- Java——集合(HashMap与Hashtable的区别)
* HashMap和Hashtable的区别* 共同点:* 底层都是哈希算法,都是双列集合* 区别:* 1,HashMap是线程不安全的,效率高* Hashtable是线程安全的,效率低 * 2,Ha ...
- Java集合框架之三:HashMap源码解析
Java集合框架之三:HashMap源码解析 版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! HashMap在我们的工作中应用的非常广泛,在工作面试中也经常会被问到,对于这样一个重要的集 ...
- Java开发笔记(五)之集合框架 Map
java笔记目录 Map 与 HashMap的介绍 Map 增加元素实例 Map 删除元素实例 Map修改元素实例 Map 与 HashMap的介绍 Map 增加元素实例 import java.ut ...
- c++ map iterator 获取key_Java集合框架——Map接口
第三阶段 JAVA常见对象的学习 集合框架--Map集合 在实际需求中,我们常常会遇到这样的问题,在诸多的数据中,通过其编号来寻找某一些信息,从而进行查看或者修改,例如通过学号查询学生信息.今天我们所 ...
- JAVA面试题:HashMap和Hashtable的区别
HashMap和Hashtable的区别 1.共同点:都是双列集合,底层都是哈希算法 2.区别: * 1.HashMap是线程不安全的,效率高,JDK1.2版本 * Hashtable是线程安全的,效 ...
- HashMap和Hashtable的区别--List,Set,Map等接口是否都继承自Map接口--Collection和Collections的区别...
面试题: 1.HashMap和Hashtable的区别?HashMap:线程不安全,效率高,键和值都允许null值Hashtable:线程安全,效率低,键和值都不允许null值ArrayList代替V ...
- 集合之Map家族的TreeMap + Sort +Properties及Collections工具类和总结
集合之Map家族的TreeMap + Sort +Properties及Collections工具类和总结 一.TreeMap 1.TreeMap的使用 import java.util.Arrays ...
- Java集合类之Map的HashMap之常用方法的使用
Java集合类之Map的HashMap之常用方法的使用 任务描述 使用 HashMap 集合操作菜单 相关知识 1.什么是 HashMap HashMap 是 Map 接口的实现类,它存储的内容是键值 ...
最新文章
- ios Develop mark
- 8.Spring整合Hibernate_2_声明式的事务管理(Annotation的方式)
- Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)
- 计算机2级access,计算机二级-Access-窗体的设计视图
- 在10分钟内在新Mac中设置Java开发环境(更新)
- linux 端口tnpl,Linux和Windows端口占用情况查看
- QT创建相应文件夹在指定目录下
- oracle中树形数据,ORACLE树形数据解决方法
- 用c语言编写函数流程,C语言课程设计————写下流程图! 谢谢
- solr带carrot2插件可以用配置好的solrconfig.xml
- 安卓开发之NDK开发基础(一)
- 开源问答Tipask伪静态apache和nginx设置
- 删除按升序排列的单链表中的所有重复元素
- Windbg调试学习
- 数据库实验三 数据查询二
- 【每日一题】Leetcode 974
- 计算机网络-详解DNS域名解析全过程
- 常见密码pojie工具
- 如何在Mac上编辑PDF?
- 42所一流大学建设高校名单
热门文章
- Java根据出生日期计算(判断)星座
- 【自然语言处理】【多模态】Product1M:基于跨模态预训练的弱监督实例级产品检索
- php 不支持ereg,PHP: ereg 、 eregi 函式的替代方案
- .woff2/svg/woff文件报404错误
- UG NX 12鼠标和键盘操作
- 合取范式可满足性问题:CDCL(Conflict-Driven Clause Learning)算法详解
- HDU-3237 Help Bubu(状压dp)
- 生如夏花之灿烂,死如秋叶之静美
- 【OMNeT++】ALOHA协议仿真中的channelUtilization
- megui 2913 汉化版 压制特效的方法