• 黑马笔记---集合(Collection的常用方法与遍历方式)


    目录

    1.集合

    1.1集合的概述

    集合的特点

    1.2集合的体系特点

    Collection集合特点

    集合对于泛型的支持

    1.3Collection集合常用API

    1.4Collection集合的遍历方式

    方式一:迭代器

    方式二:foreach/增强for循环

    方式三:lambda表达式

     1.5Collection集合存储自定义类型的对象


    1.集合

    1.1集合的概述

    集合和数组都是容器。

    数组定义完成并启动后,类型确定、长度固定,适合元素的个数和类型确定的业务场景,不适合做需要增删数据操作。

    集合的特点

    集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。集合更像气球。

    集合非常适合做元素的增删操作。

    1.数组和集合的元素存储的个数问题。

    数组定义后类型确定,长度固定

    集合类型可以不固定,大小是可变的。

    2.数组和集合存储元素的类型问题。

    数组可以存储基本类型和引用类型的数据。

    集合只能存储引用数据类型的数据。

    3.数组和集合适合的场景。

    数组适合做数据个数和类型确定的场景。

    集合适合做数据个数不确定,且要做增删元素的场景。

    1.2集合的体系特点

     Collection单列集合,每个元素(数据)只包含一个值。

    Map双列集合,每个元素包含两个值(键值对)。

    Collection集合特点

    List系列集合:添加的元素是有序、可重复、有索引。

    ArrayList、LinekdList :有序、可重复、有索引。

    Set系列集合:添加的元素是无序、不重复、无索引。

    HashSet: 无序、不重复、无索引;LinkedHashSet: 有序、不重复、无索引。

    TreeSet:按照大小默认升序排序、不重复、无索引。

    集合对于泛型的支持

    集合都是支持泛型的,可以在编译阶段约束集合只能操作某种数据类型

    注意:集合和泛型都只能支持引用数据类型,不支持基本数据类型,所以集合中存储的元素都认为是对象。

    1. import java.util.ArrayList;
    2. import java.util.Collection;
    3. import java.util.HashSet;
    4. /**
    5. 目标:明确Collection集合体系的特点
    6. */
    7. public class CollectionDemo1 {
    8. public static void main(String[] args) {
    9. // 有序 可重复 有索引
    10. Collection list = new ArrayList();
    11. list.add("Java");
    12. list.add("Java");
    13. list.add("Mybatis");
    14. list.add(23);
    15. list.add(23);
    16. list.add(false);
    17. list.add(false);
    18. System.out.println(list);
    19. // 无序 不重复 无索引
    20. Collection list1 = new HashSet();
    21. list1.add("Java");
    22. list1.add("Java");
    23. list1.add("Mybatis");
    24. list1.add(23);
    25. list1.add(23);
    26. list1.add(false);
    27. list1.add(false);
    28. System.out.println(list1);
    29. System.out.println("-----------------------------");
    30. // Collection<String> list2 = new ArrayList<String>();
    31. Collection<String> list2 = new ArrayList<>(); // JDK 7开始之后后面类型申明可以不写
    32. list2.add("Java");
    33. // list2.add(23);
    34. list2.add("zhangsan");
    35. // 集合和泛型不支持基本数据类型,只能支持引用数据类型
    36. // Collection<int> list3 = new ArrayList<>();
    37. Collection<Integer> list3 = new ArrayList<>();
    38. list3.add(23);
    39. list3.add(233);
    40. list3.add(2333);
    41. Collection<Double> list4 = new ArrayList<>();
    42. list4.add(23.4);
    43. list4.add(233.0);
    44. list4.add(233.3);
    45. }
    46. }

    总结:

    1.集合的代表是?

    Collection接口。

    2.Collection集合分了哪2大常用的集合体系?

    List系列集合:添加的元素是有序、可重复、有索引。

    Set系列集合:添加的元素是无序、不重复、无索引。

    3.如何约定集合存储数据的类型,需要注意什么?

    集合支持泛型。

    集合和泛型不支持基本类型,只支持引用数据类型。

    1.3Collection集合常用API

    Collection集合

    Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。

    Collection API如下:

     

    1. import java.util.ArrayList;
    2. import java.util.Arrays;
    3. import java.util.Collection;
    4. /**
    5. 目标:Collection集合的常用API.
    6. Collection是集合的祖宗类,它的功能是全部集合都可以继承使用的,所以要学习它。
    7. Collection API如下:
    8. - public boolean add(E e): 把给定的对象添加到当前集合中 。
    9. - public void clear() :清空集合中所有的元素。
    10. - public boolean remove(E e): 把给定的对象在当前集合中删除。
    11. - public boolean contains(Object obj): 判断当前集合中是否包含给定的对象。
    12. - public boolean isEmpty(): 判断当前集合是否为空。
    13. - public int size(): 返回集合中元素的个数。
    14. - public Object[] toArray(): 把集合中的元素,存储到数组中。
    15. 小结:
    16. 记住以上API。
    17. */
    18. public class CollectionDemo {
    19. public static void main(String[] args) {
    20. // HashSet:添加的元素是无序,不重复,无索引。
    21. Collection<String> c = new ArrayList<>();
    22. // 1.添加元素, 添加成功返回true。
    23. c.add("Java");
    24. c.add("HTML");
    25. System.out.println(c.add("HTML"));
    26. c.add("MySQL");
    27. c.add("Java");
    28. System.out.println(c.add("黑马"));
    29. System.out.println(c); // [Java, HTML, HTML, MySQL, Java, 黑马]
    30. // 2.清空集合的元素。
    31. // c.clear();
    32. // System.out.println(c);
    33. // 3.判断集合是否为空 是空返回true,反之。
    34. // System.out.println(c.isEmpty());
    35. // 4.获取集合的大小。
    36. System.out.println(c.size());
    37. // 5.判断集合中是否包含某个元素。
    38. System.out.println(c.contains("Java")); // true
    39. System.out.println(c.contains("java")); // false
    40. System.out.println(c.contains("黑马")); // true
    41. // 6.删除某个元素:如果有多个重复元素默认删除前面的第一个!
    42. System.out.println(c.remove("java")); // false
    43. System.out.println(c);
    44. System.out.println(c.remove("Java")); // true
    45. System.out.println(c);
    46. // 7.把集合转换成数组 [HTML, HTML, MySQL, Java, 黑马]
    47. Object[] arrs = c.toArray();
    48. System.out.println("数组:" + Arrays.toString(arrs));
    49. System.out.println("----------------------拓展----------------------");
    50. Collection<String> c1 = new ArrayList<>();
    51. c1.add("java1");
    52. c1.add("java2");
    53. Collection<String> c2 = new ArrayList<>();
    54. c2.add("赵敏");
    55. c2.add("殷素素");
    56. // addAll把c2集合的元素全部倒入到c1中去。
    57. c1.addAll(c2);
    58. System.out.println(c1);
    59. System.out.println(c2);
    60. }
    61. }

    1.4Collection集合的遍历方式

    方式一:迭代器

    迭代器遍历概述

    遍历就是一个一个的把容器中的元素访问一遍。

    迭代器在Java中的代表是Iterator,迭代器是集合的专用遍历方式。

    Collection集合获取迭代器

    Iterator中的常用方法

     

     

    1. import java.util.ArrayList;
    2. import java.util.Collection;
    3. import java.util.Iterator;
    4. /**
    5. 目标:Collection集合的遍历方式。
    6. 什么是遍历? 为什么开发中要遍历?
    7. 遍历就是一个一个的把容器中的元素访问一遍。
    8. 开发中经常要统计元素的总和,找最值,找出某个数据然后干掉等等业务都需要遍历。
    9. Collection集合的遍历方式是全部集合都可以直接使用的,所以我们学习它。
    10. Collection集合的遍历方式有三种:
    11. (1)迭代器。
    12. (2)foreach(增强for循环)。
    13. (3)JDK 1.8开始之后的新技术Lambda表达式(了解)
    14. a.迭代器遍历集合。
    15. -- 方法:
    16. public Iterator iterator(): 获取集合对应的迭代器,用来遍历集合中的元素的
    17. boolean hasNext():判断是否有下一个元素,有返回true ,反之。
    18. E next():获取下一个元素值!
    19. --流程:
    20. 1.先获取当前集合的迭代器
    21. Iterator<String> it = lists.iterator();
    22. 2.定义一个while循环,问一次取一次。
    23. 通过it.hasNext()询问是否有下一个元素,有就通过
    24. it.next()取出下一个元素。
    25. 小结:
    26. 记住代码。
    27. */
    28. public class CollectionDemo01 {
    29. public static void main(String[] args) {
    30. ArrayList<String> lists = new ArrayList<>();
    31. lists.add("赵敏");
    32. lists.add("小昭");
    33. lists.add("素素");
    34. lists.add("灭绝");
    35. System.out.println(lists);
    36. // [赵敏, 小昭, 素素, 灭绝]
    37. // it
    38. // 1、得到当前集合的迭代器对象。
    39. Iterator<String> it = lists.iterator();
    40. // String ele = it.next();
    41. // System.out.println(ele);
    42. // System.out.println(it.next());
    43. // System.out.println(it.next());
    44. // System.out.println(it.next());
    45. // System.out.println(it.next()); // NoSuchElementException 出现无此元素异常的错误
    46. // 2、定义while循环
    47. while (it.hasNext()){
    48. String ele = it.next();
    49. System.out.println(ele);
    50. }
    51. System.out.println("-----------------------------");
    52. }
    53. }

    迭代器执行流程

     总结:

    1.迭代器的默认位置在哪里。

    Iterator<E> iterator():得到迭代器对象,默认指向当前集合的索引0。

    2.迭代器如果取元素越界会出现什么问题。

    会出现NoSuchElementException异常。

    方式二:foreach/增强for循环

     增强for循环:既可以遍历集合也可以遍历数组。

    1. import java.util.ArrayList;
    2. import java.util.Arrays;
    3. import java.util.Collection;
    4. public class CollectionDemo02 {
    5. public static void main(String[] args) {
    6. Collection<String> lists = new ArrayList<>();
    7. lists.add("赵敏");
    8. lists.add("小昭");
    9. lists.add("殷素素");
    10. lists.add("周芷若");
    11. System.out.println(lists);
    12. // [赵敏, 小昭, 殷素素, 周芷若]
    13. // ele
    14. for (String ele : lists) {
    15. System.out.println(ele);
    16. }
    17. System.out.println("------------------");
    18. double[] scores = {100, 99.5 , 59.5};
    19. for (double score : scores) {
    20. System.out.println(score);
    21. // if(score == 59.5){
    22. // score = 100.0; // 修改无意义,不会影响数组的元素值。
    23. // }
    24. }
    25. System.out.println(Arrays.toString(scores));
    26. }
    27. }

    方式三:lambda表达式

    Lambda表达式遍历集合

    得益于JDK 8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。

    Collection结合Lambda遍历的API

     

    1. import java.util.ArrayList;
    2. import java.util.Collection;
    3. import java.util.function.Consumer;
    4. public class CollectionDemo03 {
    5. public static void main(String[] args) {
    6. Collection<String> lists = new ArrayList<>();
    7. lists.add("赵敏");
    8. lists.add("小昭");
    9. lists.add("殷素素");
    10. lists.add("周芷若");
    11. System.out.println(lists);
    12. // [赵敏, 小昭, 殷素素, 周芷若]
    13. // s
    14. lists.forEach(new Consumer<String>() {
    15. @Override
    16. public void accept(String s) {
    17. System.out.println(s);
    18. }
    19. });
    20. // lists.forEach(s -> {
    21. // System.out.println(s);
    22. // });
    23. // lists.forEach(s -> System.out.println(s) );
    24. lists.forEach(System.out::println );
    25. }
    26. }

     1.5Collection集合存储自定义类型的对象

    案例:影片信息在程序中的表示

    需求:某影院系统需要在后台存储上述三部电影,然后依次展示出来。

    分析:

    1.定义一个电影类,定义一个集合存储电影对象。

    2.创建3个电影对象,封装相关数据,把3个对象存入到集合中去。

    3.遍历集合中的3个对象,输出相关信息。

    1. public class Movie {
    2. private String name;
    3. private double score;
    4. private String actor;
    5. public Movie() {
    6. }
    7. public Movie(String name, double score, String actor) {
    8. this.name = name;
    9. this.score = score;
    10. this.actor = actor;
    11. }
    12. public String getName() {
    13. return name;
    14. }
    15. public void setName(String name) {
    16. this.name = name;
    17. }
    18. public double getScore() {
    19. return score;
    20. }
    21. public void setScore(double score) {
    22. this.score = score;
    23. }
    24. public String getActor() {
    25. return actor;
    26. }
    27. public void setActor(String actor) {
    28. this.actor = actor;
    29. }
    30. @Override
    31. public String toString() {
    32. return "Movie{" +
    33. "name='" + name + '\'' +
    34. ", score=" + score +
    35. ", actor='" + actor + '\'' +
    36. '}';
    37. }
    38. }
    1. import java.util.ArrayList;
    2. import java.util.Collection;
    3. public class TestDemo {
    4. public static void main(String[] args) {
    5. // 1、定义一个电影类
    6. // 2、定义一个集合对象存储3部电影对象
    7. Collection<Movie> movies = new ArrayList<Object>();
    8. movies.add(new Movie("《你好,李焕英》", 9.5, "张小斐,贾玲,沈腾,陈赫"));
    9. movies.add(new Movie("《唐人街探案》", 8.5, "王宝强,刘昊然,美女"));
    10. movies.add(new Movie("《刺杀小说家》",8.6, "雷佳音,杨幂"));
    11. System.out.println(movies);
    12. // 3、遍历集合容器中的每个电影对象
    13. for (Movie movie : movies) {
    14. System.out.println("片名:" + movie.getName());
    15. System.out.println("得分:" + movie.getScore());
    16. System.out.println("主演:" + movie.getActor());
    17. }
    18. }
    19. }

    集合中存储的是元素对象的地址。

  • 相关阅读:
    【C++设计模式之责任链模式:行为型】分析及示例
    雪崩问题以及sentinel的使用
    Mysql中日期相关的函数
    gin 快速入门手册
    Android学习笔记 11. RelativeLayout 相对布局
    MySql主从同步实践
    初始化固定长度的数组
    Himall商城字符串帮助类获得指定顺序的字符在字符串中的位置索引
    【云原生 | Kubernetes 系列】--Envoy基于gRPC订阅
    表单校验,日期比较
  • 原文地址:https://blog.csdn.net/weixin_65440201/article/details/125509551