今天已经是学习集合的第三天;
【1】第一天学习了Collection集合的List,ArrayList和LinkedList的常用方法和基础规则,
ArrayList特点总结:
1、ArrayList底层是数组,所以在获取元素时比较方便,属于List分支下的一种,允许集合中有相同的元素
2、LinkedList底层是链表,所有具有链表的特性在获取首元素,最有元素,插入元素,删除元素时比较方便,属于List分支下的一种
第一天学习集合的链接:
https://blog.csdn.net/weixin_44606952/article/details/122408384?spm=1001.2014.3001.5501
【2】第二天学习的是Collection集合的Set,TreeSet,和Generic(泛型),
1、Set和HashSet底层都是Hash,HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合
2、HashSet 允许有 null 值。
3、HashSet 是无序的,即不会记录插入的顺序。
4、HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。

https://blog.csdn.net/weixin_44606952/article/details/122413151?spm=1001.2014.3001.5501
【3】最后一天学习的是Collection集合的Map集合和Collections的使用

HashMap的特性简介

1、HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
2、HashMap 实现了== Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。==
3、HashMap 是无序的,即不会记录插入的顺序。
4、HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。
Hash的常用功能:

基本功能在创建Map集合之后直接掉方法使用就可以,这里主要介绍一下HashMap的遍历方法

HashMap的遍历方法一共有两种:
第一种键找值的方法遍历:

1、使用HashMap的keySet()方法获取所有的键(key),放到一个集合中
2、遍历键的集合,获取每一个key
3、根据key获取每一个value(值),使用的是Map的get()
使用示例01:

 Set<String> set = map.keySet();for (String key : set){String value = map.get(key);System.out.println(key+","+value);}

遍历方法二:
直接看图片画黄色部分,解释的很清楚;

使用示例:

     Set<Map.Entry<String,String>> sm = map.entrySet();//增强for()得到每一个键值对,再利用getkey()和getvalue()得到键值对for (Map.Entry<String ,String> me : sm){String key = me.getKey();String value = me.getValue();System.out.println(key+","+value);}

下面是几个使用集合的案例以供学习:
案例01:

Student类的完整代码:

public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}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;}
}

测试类:

import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class MapDemo {public static void main(String[] args) {Map<String,Student> map = new HashMap<String,Student>();Student s1 = new Student("林青霞",22);Student s2 = new Student("张曼玉",23);Student s3 = new Student("王祖贤",24);Student s4 = new Student("朱茵",25);map.put("it001",s1);map.put("it002",s2);map.put("it003",s3);map.put("it004",s4);//遍历集合方法一//键值对对象找键和值//使用map.entrySet()方法得到键值对,然后利用get方法得到键和值Set<Map.Entry<String,Student>> mp = map.entrySet();for (Map.Entry<String,Student> me : mp){String id = me.getKey();Student s = me.getValue();System.out.println(id+","+s.getName()+","+s.getAge());}System.out.println("-----------");//遍历集合方法二//键找值//先使用Set集合得到所有键的集合在利用map的get方法得到所有的值Set<String> set = map.keySet();for (String s : set){Student stu = map.get(s);System.out.println(s+","+stu.getName()+","+stu.getAge());}}
}

综合案例02:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class HashMapDemo {public static void main(String[] args) {ArrayList<HashMap<String,String>> arr = new ArrayList<HashMap<String,String>>();HashMap<String,String> map = new HashMap<String,String>();map.put("黄蓉","郭靖");map.put("杨康","穆念慈");HashMap<String,String> map1 = new HashMap<String,String>();map1.put("杨过","小龙女");map1.put("令狐冲","任盈盈");HashMap<String,String> map2 = new HashMap<String,String>();map2.put("董永","七仙女");map2.put("林平之","岳灵珊");arr.add(map);arr.add(map1);arr.add(map2);//遍历集合//牵扯到集合嵌套集合使用双层循环依次实现每一层集合的遍历即可for (Map<String ,String> me : arr){Set<Map.Entry<String, String>> set = me.entrySet();for (Map.Entry<String, String> mp : set){String key = mp.getKey();String value = mp.getValue();System.out.println(key+","+value);}}System.out.println("----------");for (Map<String ,String> me : arr){Set<String> key = me.keySet();for (String keyy : key){String value = me.get(keyy);System.out.println(keyy+","+value);}}}
}

案例03:

案例提示:
关键部分在于把字符串正确添加到集合中去,方法是对每碰到一个字符就是用get方法获得对应的值(也就是出现次数),如果为空就把字符直接添加,如果不是就把值+1,然后重新添加,根据HashMap的特点会覆盖掉以前的键值对,另外,如果想让键值对变得有序创建集合的时候改用TreeMap即可

import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;public class MapDemo {public static void main(String[] args) {//创建一个HashMap集合对象,键是Character值是Integer类型HashMap<Character,Integer> map = new HashMap<Character,Integer>();//如果想让集合变得有序可以使用TreeMap
//        TreeMap<Character,Integer> map = new TreeMap<Character,Integer>();//输入一个字符串Scanner sc = new Scanner(System.in);String line = sc.nextLine();//遍历字符串for (int i = 0; i < line.length(); i++){//用一个字符key来接受,使用get方法得到键为key对应的值的结果char key = line.charAt(i);Integer value = map.get(key);//如果值是null说明集合中没有存储该字符,不等于null就把值的数值加1,再次存储HashMap集合会自动覆盖以前的键值对if (value == null){map.put(key,1);}else {value++;map.put(key,value);}}//遍历键值对通过StringBuilder来取出集合里面的键值对并且按照要求得出结果字符串StringBuilder sb = new StringBuilder();//遍历集合使用键找值的方法Set<Character> keySet = map.keySet();for (Character key: keySet){Integer value = map.get(key);sb.append(key).append("(").append(value).append(")");}String s = sb.toString();System.out.println(s);}
}

Collections的简介和应用

此类仅包含对集合进行操作或返回集合的静态方法。 它包含对集合进行操作的多态算法,“包装器”,它返回由指定集合支持的新集合,以及其他一些可能性和结束。

Collections常用三种方法:

          //static <T extends Comparable<? super T>>//void sort(List<T> list) 根据其元素的natural ordering ,将指定列表按升序排序。Collections.sort(list);//static void reverse(List<?> list) 反转指定列表中元素的顺序。Collections.reverse(list);//static void shuffle(List<?> list) 使用默认的随机源随机置换指定的列表。  (和洗牌一样的操作)Collections.shuffle(list);

使用案例:
模拟斗地主:

主要使用了Collections的shuffle()方法,完成洗牌动作,把牌盒,每一个玩家的牌都看是一个ArrayList 集合,直接集合里面添加元素就完成了发牌动作;思路和代码中给出了详细的注释,可以试着打一遍哦

import java.util.ArrayList;
import java.util.Collections;public class CollectionsDemo {public static void main(String[] args) {//创建一个集合来装牌ArrayList<String> array = new ArrayList<String>();/*牌的颜色一共有4种♥♣♠♦牌的大小一共是13中2,3,4,5,6,7,8,9,10,J,Q,K,A大王小王*///创建两个字符串数组把牌色和大小对应起来String[] colors = {"♥", "♣", "♠", "♦"};String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};//装牌for (String color : colors) {for (String number : numbers) {array.add(color + number);}}array.add("大王");array.add("小王");//调用Collections的shuffle方法将牌打乱Collections.shuffle(array);//创建四个集合,三个集合代表三个玩家,剩下一个集合标底牌ArrayList<String> array1 = new ArrayList<String>();ArrayList<String> array2 = new ArrayList<String>();ArrayList<String> array3 = new ArrayList<String>();ArrayList<String> array4 = new ArrayList<String>();//开始发牌//如果当前第i张牌减去(牌的数量减去3)大于等于零说明剩下的三张是底牌//i%3表示顺序发牌for (int i = 0; i < array.size(); i++) {String s = array.get(i);if (i - (array.size() - 3) >= 0) {array4.add(s);} else if (i % 3 == 0) {array1.add(s);} else if (i % 3 == 1) {array2.add(s);} else {array3.add(s);}}//遍历四个集合查看发牌lookpoke("刘德华",array1);lookpoke("郭富城",array2);lookpoke("黎明",array3);lookpoke("底牌",array4);/*System.out.println(array1);System.out.println(array2);System.out.println(array3);System.out.println(array4);*/}public static void lookpoke(String name,ArrayList<String> arrayList){System.out.print(name+"的牌是:");for (String poker : arrayList){System.out.print(poker+",");}System.out.println();}
}

Java学习打卡第八天——[Collection终结之HashMap,Collections的简介和使用]相关推荐

  1. Java学习打卡第七天——[再谈Collection之Set,TreeSet,泛型Generic的简介和使用]

    说明:为了文章的简洁性和方便阅读在以后的打卡过程中,我会给出核心代码 Javaee之[Collection之Set] Javaee之[Collection之TreeSet] Javaee之[Colle ...

  2. Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与Lin

    1.容器API的类图结构如下: JAVA的集合类是一种特别有用的工具类,它可以用于存储数量不等的多个对象,并可以实现常用数据结构,如栈,队列等,除此之外,JAVA集合还可用于保存具有映射关系的关联数组 ...

  3. JAVA学习 API_day02(正则表达式, StringBuider, 包装类, Collection集合类接口)

    正则表达式, 包装类, Collection集合类接口 1.正则表达式 2.StringBuider类 3.包装类 4.Collection接口 1.正则表达式 public final class ...

  4. Java学习打卡第四天——[抽象类,多态,接口,形参的简介和使用]

    Javaee之[抽象类] Javaee之[多态] Javaee之[接口] Javaee之[抽象类,多态,接口,继承] Javaee之[形参] 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的, ...

  5. 黑马程序员java学习打卡----程序流程控制

    学习总内容: 分支结构 1.if 2.switch 3.switch的穿透性 循环结构 1.for循环 2.while循环 3.死循环 4.循环嵌套 跳转关键字 break continue 案列技术 ...

  6. Java|学习打卡-6

    一.面向对象与面向过程 面向对象OOP和面向过程POP的区别: 面向过程:强调的是功能行为,以函数为最小单位,考虑谁来做. 面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做. [我的理 ...

  7. [Java学习打卡]

    目录 一.今日名言 二.运算符和表达式 2.1算数运算符 2.2逻辑运算符和位运算符 2.3三元运算符 一.今日名言 人生就是一个不断接纳和抛弃的过程,就是一段迎接冷眼嘲笑孤独前行的旅途. 二.运算符 ...

  8. java学习记录十五:集合二Collections、Set、Map

    java学习记录十五:集合二 一.Collections工具类 一.解释 二.常用方法 1.打乱集合顺序 2.按照默认规则排序 3.按指定规则排序 4.批量添加元素 二.可变参数 一.解释 二.写法 ...

  9. Java学习-11 XML与JSON

    Java学习-11 XML与JSON 1.XML 1.1.简介 可扩展标记语言(eXtensible Markup Language). 特性:1. xml具有平台无关性, 是一门独立的标记语言.2. ...

最新文章

  1. case when then else多个条件_SQL巡礼之CASE用法
  2. Apache和Tomcat的区别是什么?
  3. Microbiome:植物发育和氮肥共同作用下的小麦根系微生物组
  4. Spark读取Hive中的数据加载为DataFrame
  5. 创建型模式之FactoryMethod
  6. matlab 系统辨识工具箱,MATLAB系统辨识工具箱的应用.ppt
  7. 台虚拟机更改计算机名,检查虚拟机的硬件信息、更改虚拟机名称、查看虚拟机配...
  8. jQuery学习整理 (12)
  9. python杨辉三角编程_Python基础练习实例49(打印杨辉三角)
  10. matplotlib—patches.Circle
  11. 对比select中的distinct影响
  12. Android的TextView设置padding无效
  13. [生活] 2015年终总结,2016开篇计划
  14. Allegro gerber文件路径设定
  15. Linux下,基于EETI触屏控制器的触屏失灵解决方法
  16. 由可乐加比萨化学反应引发的联想
  17. . 显示隐藏文件夹选项消失时如何还原
  18. 如何检查并清除挖矿程序
  19. 微信小程序下载文件至本地,并打开文档
  20. 全新的Microsoft Office 2016发布,以更少步骤更快地执行工作

热门文章

  1. 实现JS标签切换效果【CSS图片切换】
  2. 手机“族群论”:十大族群背后的移动新世界
  3. 大学期间技术学习方面最有成就感的事?
  4. pythonocc view coordinate_pythonOCC例子搬运:4.经典瓶子造型
  5. 字母x在css中的角色
  6. 随机句子我在人间凑数的日子V1.2成品源码+API
  7. Spring之AOP报错:Null return value from advice does not match primitive return type for
  8. Opencv4(C++)实战案例1:将朦胧的图像变清晰(去雾)
  9. No power supply specified for netVCC in Power Rail Confiquration.
  10. 基于FPGA的flash分区实现多功能转换(icap核)