一、数组和集合的区别

image.png
image.png
image.png

二、集合类的体系结构

image.png

Collection接口

image.png

  1. package com.key.d15_packeg_01.Collection;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.HashSet;
  5. /**
  6. * 明确Collection集合体系
  7. */
  8. public class demo1 {
  9. public static void main(String[] args) {
  10. /**
  11. * Arraylist:有序,可重复,有索引
  12. */
  13. Collection list = new ArrayList();
  14. list.add("JAVA");
  15. list.add("C#");
  16. list.add(24);
  17. list.add("Python");
  18. System.out.println(list);
  19. /**
  20. * Hashset:无序,不重复,无索引
  21. */
  22. Collection list1 = new HashSet();
  23. list1.add("JAVA");
  24. list1.add("C#");
  25. list1.add("JAVA");
  26. list1.add("Python");
  27. list1.add(200);
  28. System.out.println(list1);
  29. }
  30. }

image.png

三、集合对于泛型的支持

image.png

四、Collection接口常用API

image.png

  1. package com.key.d15_packeg_01.Collection;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.Collection;
  5. public class api_demo {
  6. public static void main(String[] args) {
  7. //多态定义泛型集合
  8. Collection<String> test = new ArrayList<>();
  9. //1、增加元素,添加成功返回True
  10. test.add("JAVA#");
  11. test.add("Python");
  12. System.out.println(test);
  13. //2、清空集合
  14. test.clear();
  15. System.out.println(test);
  16. //3、判断结合是否为空,是空返回True,不是返回Flase
  17. System.out.println(test.isEmpty());
  18. //4、获取结合大小
  19. test.add("JAVA#");
  20. test.add("Python");
  21. System.out.println(test.size());
  22. //5、判断结合中是否包含某个元素
  23. System.out.println(test.contains("Python"));
  24. //6、删除某个元素,如果有多个重复的元素默认删除前面的第一个
  25. System.out.println(test.remove("Python"));
  26. System.out.println(test);
  27. //7、把集合转换成数组
  28. test.add("MySQL");
  29. test.add("MSSQL");
  30. test.add("Python");
  31. System.out.println(test);
  32. /**
  33. * 这里要将集合转换为Object类型的数组,因为要接收一切类型的数据
  34. */
  35. Object[] arrs = test.toArray();
  36. String result = Arrays.toString(arrs); //打印数组内容
  37. System.out.println(result);
  38. System.out.println("-------------------拓展内容---------------------");
  39. /**
  40. * 创建两个集合,list1和list2
  41. */
  42. Collection<String> list1 = new ArrayList<>();
  43. list1.add("java1");
  44. list1.add("java2");
  45. Collection<String> list2 = new ArrayList<>();
  46. list2.add("python1");
  47. list2.add("python2");
  48. //把list2的元素拷贝到list1中去
  49. list1.addAll(list2);
  50. System.out.println(list1);
  51. }
  52. }

五、Collection集合的遍历方式

1、迭代器(迭代器只能用来遍历数组)

image.png

  1. package com.key.d15_packeg_01.Collection;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.Iterator;
  5. public class iterator_demo {
  6. public static void main(String[] args) {
  7. Collection<String> list = new ArrayList<>();
  8. list.add("JAVA");
  9. list.add("Python");
  10. list.add("MySQL");
  11. list.add("MSSQL");
  12. list.add("TomCat");
  13. list.add("Shiro");
  14. System.out.println(list);
  15. System.out.println("----------------------");
  16. //得到当前集合的迭代器
  17. Iterator<String> iterator = list.iterator();
  18. /**
  19. * 一步步通过next()遍历集合
  20. */
  21. //String str = iterator.next();
  22. //System.out.println(str); //输出JAVA
  23. //System.out.println(iterator.next()); //输出Python
  24. //System.out.println(iterator.next()); //输出MySQL
  25. //System.out.println(iterator.next()); //输出MSSQL
  26. //System.out.println(iterator.next()); //输出TomCat
  27. //System.out.println(iterator.next()); //输出Shiro
  28. //System.out.println(iterator.next()); //越界了,超出范围,这个就会报错
  29. /**
  30. * 通过循环遍历结合
  31. */
  32. while (iterator.hasNext()){
  33. System.out.println(iterator.next());
  34. }
  35. }
  36. }

image.png

2、foreach遍历/增强for循环(即可以遍历数组也可以遍历集合)

image.png

  1. package com.key.d15_packeg_01.Collection;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. public class foreach_demo {
  5. public static void main(String[] args) {
  6. Collection<String> list = new ArrayList<>();
  7. list.add("JAVA");
  8. list.add("Python");
  9. list.add("MySQL");
  10. list.add("MSSQL");
  11. list.add("TomCat");
  12. list.add("Shiro");
  13. System.out.println(list);
  14. System.out.println("----------------------");
  15. /**
  16. * foreach遍历集合
  17. */
  18. for (String str:list){
  19. System.out.println(str);
  20. }
  21. System.out.println("--------------");
  22. /**
  23. * foreach遍历数组
  24. */
  25. double[] scores = {99.0,90.5,85.9};
  26. for (double score : scores) {
  27. System.out.println(score);
  28. }
  29. }
  30. }

3、lambda遍历(不常用 )

image.png

  1. package com.key.d15_packeg_01.Collection;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.function.Consumer;
  5. public class lambda_demo {
  6. public static void main(String[] args) {
  7. Collection<String> list = new ArrayList<>();
  8. list.add("JAVA");
  9. list.add("Python");
  10. list.add("MySQL");
  11. list.add("MSSQL");
  12. list.add("TomCat");
  13. list.add("Shiro");
  14. System.out.println(list);
  15. System.out.println("----------------------");
  16. list.forEach(new Consumer<String>() {
  17. @Override
  18. public void accept(String s) {
  19. System.out.println(s);
  20. }
  21. });
  22. }
  23. }

image.png

六、Collection集合存储自定义类型对象

举一个实例
image.png

  1. package com.key.d15_packeg_01.Collection;
  2. public class Movie {
  3. private String name;
  4. private String time;
  5. private double scores;
  6. public Movie(String name, String time, double scores) {
  7. this.name = name;
  8. this.time = time;
  9. this.scores = scores;
  10. }
  11. public Movie() {
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public String getTime() {
  20. return time;
  21. }
  22. public void setTime(String time) {
  23. this.time = time;
  24. }
  25. public double getScores() {
  26. return scores;
  27. }
  28. public void setScores(double scores) {
  29. this.scores = scores;
  30. }
  31. }
  1. package com.key.d15_packeg_01.Collection;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.Iterator;
  5. public class example {
  6. public static void main(String[] args) {
  7. Movie m1 = new Movie("复仇者联盟","2021-4",8.4);
  8. Movie m2 = new Movie("红海行动","2019-7",9.2);
  9. Movie m3 = new Movie("一条狗的使命","2016-12",7.0);
  10. Collection<Movie> movie_list = new ArrayList<>();
  11. movie_list.add(m1);
  12. movie_list.add(m2);
  13. movie_list.add(m3);
  14. /* 这样打印的是对象地址
  15. Iterator iterator = movie_list.iterator();
  16. while (iterator.hasNext()){
  17. System.out.println(iterator.next());
  18. }
  19. */
  20. for (Movie movie : movie_list) {
  21. //System.out.println(movie.getName());
  22. System.out.println("片名:" + movie.getName() + "\t" + "上映时间:" + movie.getTime() + "\t" + "得分:" + movie.getScores());
  23. }
  24. }
  25. }

image.png

七、List集合

image.png
image.png

  1. package com.key.d15_packeg_02.List;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class List_demo1 {
  5. public static void main(String[] args) {
  6. List<String> list = new ArrayList<>();
  7. list.add("JAVA");
  8. list.add("Python");
  9. list.add("MySQL");
  10. list.add("MSSQL");
  11. System.out.println(list);
  12. //在指定位置插入元素
  13. list.add(2,"Shiro");
  14. System.out.println(list);
  15. //删除指定位置元素,并返回删除的元素
  16. System.out.println(list.remove(2));
  17. System.out.println(list);
  18. //修改指定位置的元素,并返回被修改的元素
  19. System.out.println(list.set(2, "mysql"));
  20. System.out.println(list);
  21. //返回指定位置元素
  22. System.out.println(list.get(0));
  23. }
  24. }

image.png

八、List集合遍历

image.png

  1. package com.key.d15_packeg_02.List;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. import java.util.function.Consumer;
  6. public class List_demo2 {
  7. public static void main(String[] args) {
  8. List<String> list = new ArrayList<>();
  9. list.add("JAVA");
  10. list.add("Python");
  11. list.add("MySQL");
  12. list.add("MSSQL");
  13. //1、迭代器
  14. Iterator<String> iterator = list.iterator();
  15. while (iterator.hasNext()){
  16. System.out.println(iterator.next());
  17. }
  18. System.out.println("--------------------------");
  19. //2、foreach
  20. for (String s : list) {
  21. System.out.println(s);
  22. }
  23. System.out.println("--------------------------");
  24. //3、Lambda表达式
  25. list.forEach(new Consumer<String>() {
  26. @Override
  27. public void accept(String s) {
  28. System.out.println(s);
  29. }
  30. });
  31. System.out.println("--------------------------");
  32. //4、for循环
  33. for (int x = 0; x < list.size(); x++){
  34. System.out.println(list.get(x));
  35. }
  36. }
  37. }

那么开发中具体要使用哪种方式遍历呢?
(1)如果只是遍历数据,那么四种方式都一样
(2)如果要知道遍历到哪里去了,就应该使用for循环

九、LinkedList特点

image.png

  1. package com.key.d15_packeg_02.List;
  2. import java.util.ArrayList;
  3. import java.util.LinkedList;
  4. public class LinkedList_demo {
  5. public static void main(String[] args) {
  6. LinkedList<String> list = new LinkedList<>();
  7. list.add("JAVA");
  8. list.add("Python");
  9. list.add("MySQL");
  10. list.add("MSSQL");
  11. System.out.println(list);
  12. System.out.println("--------------");
  13. //在开头插入指定元素
  14. list.addFirst("Shiro");
  15. System.out.println(list);
  16. System.out.println("--------------");
  17. //在结尾插入指定元素
  18. list.addLast("WebLogic");
  19. System.out.println(list);
  20. System.out.println("--------------");
  21. //返回第一个元素
  22. System.out.println(list.getFirst());
  23. System.out.println("--------------");
  24. //返回最后一个元素
  25. System.out.println(list.getLast());
  26. System.out.println("--------------");
  27. //删除第一个元素,并返回删除的元素
  28. System.out.println(list.removeFirst());
  29. System.out.println(list);
  30. System.out.println("--------------");
  31. //删除最后一个元素,并返回删除的元素
  32. System.out.println(list.removeLast());
  33. System.out.println(list);
  34. System.out.println("--------------");
  35. }
  36. }

image.png

十、集合的遍历删除

  1. package com.key.d15_packeg_02.List;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. import java.util.function.Consumer;
  6. public class test {
  7. public static void main(String[] args) {
  8. List<String> list = new ArrayList<>();
  9. list.add("JAVA");
  10. list.add("Python");
  11. list.add("MySQL");
  12. list.add("MSSQL");
  13. list.add("JAVA");
  14. list.add("Shiro");
  15. System.out.println(list);
  16. //System.out.println("删除集合中所有JAVA元素");
  17. //1、迭代器遍历删除
  18. Iterator<String> iterator = list.iterator();
  19. while (iterator.hasNext()){
  20. if ("JAVA".equals(iterator.next())){
  21. //list.remove("JAVA"); //用list.remove()删除会报错,因为删除操作后,元素前移了
  22. iterator.remove(); //删除当前所在元素,并且删除后元素不会前移
  23. }
  24. }
  25. System.out.println(list);
  26. //2、foreach遍历删除(一定会出问题,不能用foreach遍历删除元素)
  27. /*
  28. for (String s : list) {
  29. if ("JAVA".equals(s)){
  30. list.remove(s);
  31. }
  32. }
  33. */
  34. //3、Lambda表达式遍历删除元素(一定会出问题,不能用foreach遍历删除元素)
  35. /*
  36. list.forEach(new Consumer<String>() {
  37. @Override
  38. public void accept(String s) {
  39. if ("JAVA".equals(s)){
  40. list.remove(s);
  41. }
  42. }
  43. });
  44. */
  45. //4、for循环遍历删除(不会弹Bug,但是会漏删除元素)
  46. /*
  47. for (int i = 0; i < list.size(); i++){
  48. if ("JAVA" == list.get(i)){
  49. list.remove("JAVA");
  50. }
  51. }
  52. */
  53. //for循环遍历删除的解决方法一:倒着删除,从后向前删除
  54. for (int i = list.size() - 1; i >= 0 ; i--){
  55. if ("JAVA" == list.get(i)){
  56. list.remove("JAVA");
  57. }
  58. }
  59. System.out.println(list);
  60. //for循环遍历删除的解决方法二:正着删除,手动i--
  61. for (int i = 0; i < list.size(); i++){
  62. if ("JAVA" == list.get(i)){
  63. list.remove("JAVA");
  64. i--;
  65. }
  66. }
  67. System.out.println(list);
  68. }
  69. }

image.png

十一、Set集合

image.png

1、HashSet

HashSet特点:无序,不重复,无索引

(1)LinkedHashSet

LinkedHashSet特点:有序,不重复,无索引
image.png

2、TreeSet

image.png
image.png
如果想要用TreeSet存储自定义类型的对象,如Students类等,需要自己制定培训规则

如何自定义排序????
image.png
image.png

举个例子:
用TreeSet定义Students类,并按照学生年龄升序排列

  1. package com.key.d15_packeg_04.Set;
  2. public class Students implements Comparable<Students>{
  3. private String name;
  4. private int age;
  5. private String sex;
  6. public Students(String name, int age, String sex) {
  7. this.name = name;
  8. this.age = age;
  9. this.sex = sex;
  10. }
  11. public Students() {
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public int getAge() {
  20. return age;
  21. }
  22. public void setAge(int age) {
  23. this.age = age;
  24. }
  25. public String getSex() {
  26. return sex;
  27. }
  28. public void setSex(String sex) {
  29. this.sex = sex;
  30. }
  31. @Override
  32. public String toString() {
  33. return "姓名" + this.name + "\t\t\t" + "年龄:" + this.age + "\t\t\t" + "性别:" + this.sex + "\n";
  34. }
  35. /**
  36. * 通过compareTo自定义比较规则
  37. * student1.compareTo(student2) student1与student2进行比较
  38. * @param o
  39. * @return
  40. */
  41. @Override
  42. public int compareTo(Students o) {
  43. //自定义比较规则,按照年龄比较
  44. return this.age - o.age;
  45. }
  46. }

  1. package com.key.d15_packeg_04.Set;
  2. import java.util.Set;
  3. import java.util.TreeSet;
  4. public class TreeSetDemo {
  5. public static void main(String[] args) {
  6. Set<String> treesets = new TreeSet<>();
  7. treesets.add("JAVA");
  8. treesets.add("Python");
  9. treesets.add("MYSQL");
  10. treesets.add("JAVA");
  11. treesets.add("MSSQL");
  12. treesets.add("About");
  13. System.out.println(treesets);
  14. System.out.println("-------------------------");
  15. Set<Students> stu = new TreeSet<>();
  16. stu.add(new Students("0ss7key",25,"man"));
  17. stu.add(new Students("zhangsan",20,"man"));
  18. stu.add(new Students("张小花",18,"woman"));
  19. System.out.println(stu);
  20. }
  21. }

image.png

拓展知识:可变参数

image.png
举个例子:

  1. package com.key.d15_packeg_05.params;
  2. import java.util.Arrays;
  3. public class test {
  4. public static void main(String[] args) {
  5. sum(10); //可以传输一个参数
  6. sum(20,30); //可以传输多个参数,也可以传输数组
  7. sum(); //可以不传参
  8. sum(new int[]{10,20,30,40}); //传输数组
  9. }
  10. /**
  11. * 1、一个形参列表中只能有一个可变参数
  12. * 2、可变阐述要放在形参的最后声明
  13. * @param numbers
  14. */
  15. public static void sum(int...numbers){
  16. //可变参数在方法内部其实就是一个数组
  17. System.out.println("数组个数为:" + numbers.length);
  18. System.out.println("数组内容:" + Arrays.toString(numbers));
  19. }
  20. }

image.png

拓展知识:集合工具类Collections

image.png image.png
举个例子:

  1. package com.key.d15_packeg_04.Set;
  2. public class Students implements Comparable<Students>{
  3. private String name;
  4. private int age;
  5. private String sex;
  6. public Students(String name, int age, String sex) {
  7. this.name = name;
  8. this.age = age;
  9. this.sex = sex;
  10. }
  11. public Students() {
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public int getAge() {
  20. return age;
  21. }
  22. public void setAge(int age) {
  23. this.age = age;
  24. }
  25. public String getSex() {
  26. return sex;
  27. }
  28. public void setSex(String sex) {
  29. this.sex = sex;
  30. }
  31. @Override
  32. public String toString() {
  33. return "姓名" + this.name + "\t\t\t" + "年龄:" + this.age + "\t\t\t" + "性别:" + this.sex + "\n";
  34. }
  35. /**
  36. * 通过compareTo自定义比较规则
  37. * student1.compareTo(student2) student1与student2进行比较
  38. * @param o
  39. * @return
  40. */
  41. @Override
  42. public int compareTo(Students o) {
  43. //自定义比较规则,按照年龄比较
  44. return this.age - o.age;
  45. }
  46. }
  1. package com.key.d15_packeg_06.Collections;
  2. import java.util.*;
  3. public class CollectionsDemo1 {
  4. public static void main(String[] args) {
  5. /**
  6. * 给集合对象批量添加数据
  7. */
  8. Collection<String> list1 = new ArrayList<>();
  9. System.out.println("批量添加元素:");
  10. //list1.add("java");
  11. //list1.add("python");
  12. //list1.add("c++");
  13. Collections.addAll(list1,"java","python","c++");
  14. System.out.println(list1);
  15. System.out.println("---------------");
  16. /**
  17. * 打乱集合的顺序(只能打乱List集合的顺序)
  18. */
  19. //Collections.shuffle(list1);
  20. List<String> list2 = new ArrayList<>();
  21. System.out.println("打乱集合的顺序(只能打乱List集合的顺序):");
  22. Collections.addAll(list2,"java","python","c++","mysql");
  23. Collections.shuffle(list2);
  24. System.out.println(list2);
  25. System.out.println("---------------");
  26. /**
  27. * 对集合中的元素进行排序(只能对List集合进行排序)
  28. */
  29. //按照默认规则进行排序
  30. Collections.sort(list2);
  31. System.out.println(list2);
  32. //按照指定规则进行排序,对Students类按照年龄进行升序排列
  33. //方式一:
  34. List<Students> stu = new ArrayList<>();
  35. stu.add(new Students("0ss7key",25,"man"));
  36. stu.add(new Students("zhangsan",20,"man"));
  37. stu.add(new Students("张小花",18,"woman"));
  38. Collections.sort(stu);
  39. System.out.println(stu);
  40. /**
  41. * 与TreeSet排序相同,需要通过Comparable进行排序
  42. */
  43. //方式二:sort()方法自带Comparator比较器
  44. Collections.sort(stu, new Comparator<Students>() {
  45. @Override
  46. public int compare(Students o1, Students o2) {
  47. return o2.getAge() - o1.getAge();
  48. }
  49. });
  50. System.out.println("-----------");
  51. System.out.println(stu);
  52. }
  53. }

image.png

十二、Map集合

1、Map集合概述

image.png

2、Map集合特点

image.png
Map集合的键是无需不重复的,Map集合的值可以重复,不作要求
image.png

3、Map集合常用API

image.png

  1. package com.key.d15_packeg_07.Map;
  2. import java.util.Collection;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import java.util.Set;
  6. public class MapAPIdemo {
  7. public static void main(String[] args) {
  8. /**
  9. * Map集合常用API整理
  10. */
  11. Map<String,Integer> maps = new HashMap<>();
  12. //增加元素,put()
  13. maps.put("苹果",5);
  14. maps.put("香蕉",9);
  15. maps.put("《零基础学JAVA》",1);
  16. maps.put("《渗透测试指南》",2);
  17. maps.put("玩具",100);
  18. System.out.println(maps);
  19. System.out.println("---------------------");
  20. //根据键值删除元素,remove()
  21. maps.remove("香蕉");
  22. System.out.println(maps);
  23. System.out.println("---------------------");
  24. //判断集合是否包含指定键值,如果存在则返回true,不存在返回false
  25. System.out.println(maps.containsKey("苹果"));
  26. System.out.println("---------------------");
  27. //判断集合是否包含指定内容值,如果存在则返回true,不存在返回false
  28. System.out.println(maps.containsValue(100));
  29. System.out.println("---------------------");
  30. //判断集合是否为空,集合为空则返回true,不为空返回false
  31. System.out.println(maps.isEmpty());
  32. System.out.println("---------------------");
  33. //返回集合中键值对的个数
  34. System.out.println(maps.size());
  35. System.out.println("---------------------");
  36. //获取集合的所有键值(很重要,为遍历Maps集合做准备),keySet()
  37. Set<String> keylist = maps.keySet();
  38. System.out.println(keylist);
  39. System.out.println("---------------------");
  40. //获取集合的所有内容值,values()
  41. Collection<Integer> valuelist = maps.values();
  42. System.out.println(valuelist);
  43. System.out.println("---------------------");
  44. //清空集合
  45. maps.clear();
  46. System.out.println(maps);
  47. System.out.println("---------------------");
  48. }
  49. }

image.png

扩展:合并其他Map集合

  1. package com.key.d15_packeg_07.Map;
  2. import java.util.Collection;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import java.util.Set;
  6. public class MapAPIdemo {
  7. public static void main(String[] args) {
  8. /**
  9. * Map集合常用API整理
  10. */
  11. Map<String,Integer> maps = new HashMap<>();
  12. //增加元素,put()
  13. maps.put("苹果",5);
  14. maps.put("香蕉",9);
  15. maps.put("《零基础学JAVA》",1);
  16. maps.put("《渗透测试指南》",2);
  17. maps.put("玩具",100);
  18. //合并Map集合,putAll()
  19. Map<String,Integer> maps1 = new HashMap<>();
  20. maps1.put("枪",1);
  21. maps1.put("子弹",666);
  22. maps1.putAll(maps); //将maps集合合并到maps1中去
  23. System.out.println(maps1);
  24. }
  25. }

image.png

4、Map集合的遍历方式

(1)键找值

image.png

  1. Map<String,Integer> maps = new HashMap<>();
  2. maps.put("苹果",5);
  3. maps.put("香蕉",9);
  4. maps.put("《零基础学JAVA》",1);
  5. maps.put("《渗透测试指南》",2);
  6. maps.put("玩具",100);
  7. /**
  8. * 键找值遍历集合
  9. */
  10. //1、先提取键值
  11. Set<String> key = maps.keySet();
  12. //2、遍历每个键,根据建提取值
  13. for (String s : key) {
  14. int value = maps.get(s);
  15. System.out.println(s + " ==> " + value);
  16. }

image.png

(2)键值对

image.png
image.png

  1. /**
  2. * 键值对遍历集合
  3. */
  4. //1、把Map集合转换为Set集合
  5. Set<Map.Entry<String, Integer>> entries = maps.entrySet(); //可以用ctrl+alt快捷键直接不全转换
  6. //System.out.println(maps);
  7. //2、开始遍历
  8. for (Map.Entry<String, Integer> entry : entries) {
  9. System.out.println(entry.getKey() + "==>" + entry.getValue());
  10. }

image.png

(3)Lambda表达式

image.png

  1. /**
  2. * Lambda表达式遍历集合
  3. */
  4. maps.forEach(new BiConsumer<String, Integer>() {
  5. @Override
  6. public void accept(String key, Integer value) {
  7. System.out.println(key + "==>" + value);
  8. }
  9. });
  10. //Lambda表达式简化后:
  11. maps.forEach((k, v) -> {
  12. System.out.println(k + "==>" + v);
  13. });

image.png

5、Map集合案例程序编写

image.png

  1. package com.key.d15_packeg_07.Map;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import java.util.Random;
  5. /**
  6. * 统计投票人数
  7. */
  8. public class Map_test {
  9. public static void main(String[] args) {
  10. //1、把学生投票结果传入集合中
  11. String[] place = {"A","B","C","D"};
  12. StringBuilder sb = new StringBuilder();
  13. Random r = new Random();
  14. for (int i = 0; i < 80; i++) {
  15. sb.append(place[r.nextInt(place.length)]);
  16. }
  17. System.out.println(sb);
  18. //2、定义一个Map集合记录投票结果
  19. Map<Character ,Integer> result = new HashMap<>();
  20. //3、遍历投票结果
  21. for (int i = 0; i < sb.length(); i++) {
  22. //4、择当前投票结果
  23. char ch = sb.charAt(i);
  24. //5、判断Map集合中是否存在这个键
  25. if (result.containsKey(ch)){
  26. //计数+1
  27. result.put(ch,result.get(ch) + 1);
  28. }else {
  29. //说明这个投票结果第一次出现,要放到Map集合中
  30. result.put(ch,1);
  31. }
  32. }
  33. //6、输出Map集合
  34. System.out.println(result);
  35. }
  36. }

image.png

6、Map集合的实现类HashMap

image.png

7、Map集合的实现类LinkedHashMap

image.png

8、Map集合的实现类TreeMap

image.png

举例:将Students类加入集合中,按照Students类的特点进行排序

  1. package com.key.d15_packeg_07.Map;
  2. public class Students implements Comparable<Students>{
  3. private String name;
  4. private int age;
  5. private String sex;
  6. public Students(String name, int age, String sex) {
  7. this.name = name;
  8. this.age = age;
  9. this.sex = sex;
  10. }
  11. public Students() {
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public int getAge() {
  20. return age;
  21. }
  22. public void setAge(int age) {
  23. this.age = age;
  24. }
  25. public String getSex() {
  26. return sex;
  27. }
  28. public void setSex(String sex) {
  29. this.sex = sex;
  30. }
  31. @Override
  32. public String toString() {
  33. return "姓名" + this.name + "\t\t\t" + "年龄:" + this.age + "\t\t\t" + "性别:" + this.sex + "\n";
  34. }
  35. /**
  36. * 通过compareTo自定义比较规则
  37. * student1.compareTo(student2) student1与student2进行比较
  38. * @param o
  39. * @return
  40. */
  41. @Override
  42. public int compareTo(Students o) {
  43. //自定义比较规则,按照年龄比较
  44. return this.age - o.age;
  45. }
  46. }
  1. package com.key.d15_packeg_07.Map;
  2. import java.util.Comparator;
  3. import java.util.Map;
  4. import java.util.TreeMap;
  5. public class TreeMapDemo {
  6. public static void main(String[] args) {
  7. //TreeMap集合自带排序
  8. Map<Integer,String> treemap1 = new TreeMap<>();
  9. treemap1.put(1,"0ss7key");
  10. treemap1.put(13,"bob");
  11. treemap1.put(5,"jack");
  12. treemap1.put(4,"davi");
  13. System.out.println(treemap1);
  14. //自定义排序方式一:通过Comparable接口重写比较规则,按照年龄升序排列
  15. Map<Students,String> treemaps = new TreeMap<>();
  16. treemaps.put(new Students("0ss7key",25,"man"),"DaLian");
  17. treemaps.put(new Students("wangwu",29,"man"),"WuHan");
  18. treemaps.put(new Students("zhangxiaohua",18,"woman"),"SiChuan");
  19. System.out.println(treemaps);
  20. System.out.println("-----------------");
  21. //自定义排序方式二:集合自定义Comparator比较器对象,重写比较规则,按照年龄降序排列
  22. Map<Students,String> treemaps1 = new TreeMap<>(new Comparator<Students>() {
  23. @Override
  24. public int compare(Students o1, Students o2) {
  25. //return o2.getAge() - o1.getAge();
  26. return Integer.compare(o2.getAge(),o1.getAge());
  27. }
  28. });
  29. treemaps1.put(new Students("0ss7key",25,"man"),"DaLian");
  30. treemaps1.put(new Students("wangwu",29,"man"),"WuHan");
  31. treemaps1.put(new Students("zhangxiaohua",18,"woman"),"SiChuan");
  32. System.out.println(treemaps1);
  33. System.out.println("-----------------");
  34. }
  35. }

image.png

十三、集合的嵌套

image.png

  1. package com.key.d15_packeg_07.Map;
  2. import java.util.*;
  3. public class Map_test2 {
  4. public static void main(String[] args) {
  5. //1、记录每个学生的选择记录,用Map集合来存储
  6. Map<String, List<String>> choose = new HashMap<>(); //集合嵌套,因为一个学生可能会选择多个景点,所以这里用List集合代替选择结果
  7. //2、把选择的数据存入进去
  8. List<String> list1 = new ArrayList<>();
  9. Collections.addAll(list1,"A","D");
  10. choose.put("张三",list1);
  11. //System.out.println(choose);
  12. List<String> list2 = new ArrayList<>();
  13. Collections.addAll(list2,"A","B","D");
  14. choose.put("李四",list2);
  15. List<String> list3 = new ArrayList<>();
  16. Collections.addAll(list3,"C","D");
  17. choose.put("王五",list3);
  18. List<String> list4 = new ArrayList<>();
  19. Collections.addAll(list4,"A","B","C");
  20. choose.put("张小花",list4);
  21. List<String> list5 = new ArrayList<>();
  22. Collections.addAll(list5,"A","B","C","D");
  23. choose.put("刘涛",list5);
  24. System.out.println(choose);
  25. //3、统计每个景点选择的人数
  26. Map<String,Integer> result = new HashMap<>();
  27. //4、提取所有人选择的景点信息
  28. Collection<List<String>> values = choose.values();
  29. //System.out.println(values);
  30. for (List<String> value : values) {
  31. for (String s : value) {
  32. if (result.containsKey(s)){
  33. result.put(s,result.get(s) + 1);
  34. }else {
  35. result.put(s,1);
  36. }
  37. }
  38. }
  39. System.out.println(result);
  40. }
  41. }

十四、不可变集合

image.png
image.png
image.png

  1. package com.key.d15_packeg_07.Map;
  2. import java.util.List;
  3. public class bukebian {
  4. public static void main(String[] args) {
  5. List<Double> list = List.of(600.0,550.5,490.5,535.0); //定义不可变集合
  6. System.out.println(list);
  7. //list.add(599.0);
  8. }
  9. }