• 41、集合


    一、基本介绍:

    1、引入:

    (1)前面我们保存多个数据使用的是数组,但数组不足的地方有:

    1)长度开始时必须指定,而且一旦指定,不能更改

    2)保存的必须为同一类型的元素

    3)使用数组进行增加元素的示意代码—比较麻烦

    (2)集合

    1)可以动态保存任意多个对象,使用比较方便!

    2)提供了一系列方便的操作对象的方法:add、remove、set、get等

    3)使用集合添加,删除新元素的示意代码—简洁了

    2、java的集合类很多,主要分为两大类: 

     

     3、快速入门

    1. package Collection_;
    2. import java.util.ArrayList;
    3. import java.util.HashMap;
    4. public class Collection01 {
    5. @SuppressWarnings({"all"})
    6. public static void main(String[] args) {
    7. //单列集合,存放的是一个对象
    8. ArrayList arrayList=new ArrayList();
    9. arrayList.add("jack");
    10. arrayList.add("tom");
    11. //双列集合,存放的是键值对 K-V
    12. HashMap hasMap=new HashMap();
    13. hasMap.put("N01","Beijing");
    14. hasMap.put("N02","Shanghai");
    15. }
    16. }

    二、Collection接口和常用方法:

    1、Collection接口实现类的特点:

    (1)Collection实现子类可以存放多个元素,每个元素可以是Object

    (2)有些Collection的实现类,可以存放重复的元素,有些不可以

    (3)有些Collection的实现类,有些是有序的(List),有些不是有序的(Set)

    (4)Collection接口没有直接地实现子类,是通过它的子接口Set和List来实现的

    2、Collection接口常用方法:

    1. package Collection_;
    2. import java.util.ArrayList;
    3. public class List_ {
    4. @SuppressWarnings({"all"})
    5. public static void main(String[] args) {
    6. ArrayList list=new ArrayList();
    7. list.add("jack");
    8. list.add(10);
    9. list.add(true);
    10. System.out.println("lsit="+list);
    11. //lsit=[jack, 10, true]
    12. list.remove(true);
    13. System.out.println("lsit删掉true了吗:"+list);
    14. //lsit删掉true了吗:[jack, 10]
    15. System.out.println("list是否包含jack:"+list.contains("jack"));
    16. //list是否包含jack:true
    17. System.out.println("list包含的元素个数:"+list.size());
    18. //list包含的元素个数:2
    19. System.out.println("list是否为空:"+list.isEmpty());
    20. //list是否为空:false
    21. list.clear();
    22. System.out.println("list是否已经清空:"+list);
    23. //list是否已经清空:[]
    24. ArrayList list2=new ArrayList();
    25. list2.add("tom");
    26. list2.add("smith");
    27. list.addAll(list2);
    28. System.out.println("list把list2的元素全部添加:"+list);
    29. //list把list2的元素全部添加:[tom, smith]
    30. System.out.println("在list中查找list2的全部元素:"+list.containsAll(list2));
    31. //在list中查找list2的全部元素:true
    32. list.removeAll(list2);
    33. System.out.println("把list中list2的元素全部删掉:"+list);
    34. //把list中list2的元素全部删掉:[]
    35. }
    36. }

    3、Collection接口遍历元素方式:

    (1)方式一:使用Iterator(迭代器)

    1)Iterator对象称为迭代器,主要用于遍历Collection集合中的元素

    2)所有实现了Collection接口的集合类都有一个Iterator()方法,用以返回一个实现了Iterator接口的对象,即可以返回一个迭代器

    3)Iterator仅用于遍历集合,Iterator本身并不存放对象

     4)

     5)

    1. package Collection_;
    2. import java.awt.print.Book;
    3. import java.util.ArrayList;
    4. import java.util.Collection;
    5. import java.util.Iterator;
    6. import java.util.Objects;
    7. public class CollectionIterator {
    8. @SuppressWarnings({"all"})
    9. public static void main(String[] args) {
    10. Collection col=new ArrayList();
    11. col.add(new Book1("三国演义","罗贯中",10.1));
    12. col.add(new Book1("小李飞刀","古龙",5.1));
    13. col.add(new Book1("红楼梦","曹雪芹",34.6));
    14. //遍历col集合输出
    15. //1、先得到col对应的迭代器
    16. //2、使用while循环,快捷键:itit,
    17. //Ctrl+J可以查看更多的快捷键
    18. //3、当退出while循环后,这时iterator迭代器,指向最后的元素,iterator.next();报错
    19. //4、如果希望再次遍历,需要重置迭代器
    20. Iterator iterator=col.iterator();
    21. while(iterator.hasNext()){//判断是否还有数据
    22. //返回下一个元素,类型是Object,编译类型是Object,
    23. // 但运行类型取决于col集合里添加的内容,可能是Book1,也可能是String
    24. Object obj=iterator.next();
    25. System.out.println("obj="+obj);
    26. }
    27. iterator=col.iterator();//重置迭代器
    28. System.out.println("=========第二次遍历========");
    29. while(iterator.hasNext()){
    30. Object obj=iterator.next();
    31. System.out.println("obj="+obj);
    32. }
    33. }
    34. }
    35. class Book1{
    36. private String name;
    37. private String author;
    38. private double price;
    39. public Book1(String name,String author,double price){
    40. this.name=name;
    41. this.author=author;
    42. this.price=price;
    43. }
    44. public String getName() {
    45. return name;
    46. }
    47. public void setName(String name) {
    48. this.name = name;
    49. }
    50. public String getAuthor() {
    51. return author;
    52. }
    53. public void setAuthor(String author) {
    54. this.author = author;
    55. }
    56. public double getPrice() {
    57. return price;
    58. }
    59. public void setPrice(double price) {
    60. this.price = price;
    61. }
    62. @Override
    63. public String toString() {
    64. return "Book{" +
    65. "name='" + name + '\'' +
    66. ", author='" + author + '\'' +
    67. ", price=" + price +
    68. '}';
    69. }
    70. }
    71. //obj=Book{name='三国演义', author='罗贯中', price=10.1}
    72. //obj=Book{name='小李飞刀', author='古龙', price=5.1}
    73. //obj=Book{name='红楼梦', author='曹雪芹', price=34.6}
    74. //=========第二次遍历========
    75. //obj=Book{name='三国演义', author='罗贯中', price=10.1}
    76. //obj=Book{name='小李飞刀', author='古龙', price=5.1}
    77. //obj=Book{name='红楼梦', author='曹雪芹', price=34.6}

     (2)方式二:for循环增强

    1)特点:增加for就是简化版的iterator,本质一样,只能用于遍历集合或数组

    2)基本语法:

    1. for(元素类型 元素名:集合名式数组名){
    2. 访问元素;
    3. }
    1. package Collection_;
    2. import java.util.ArrayList;
    3. import java.util.Collection;
    4. public class CollectionFor {
    5. @SuppressWarnings({"all"})
    6. public static void main(String[] args) {
    7. Collection col=new ArrayList();
    8. col.add(new Book1("三国演义","罗贯中",10.1));
    9. col.add(new Book1("小李飞刀","古龙",5.1));
    10. col.add(new Book1("红楼梦","曹雪芹",34.6));
    11. //1、在Collection集合中使用增强for
    12. //2、增强for,底层仍然是迭代器,所以增加for就是简化版的iterator
    13. //3、增强for的快捷键是I
    14. for(Object book:col){
    15. System.out.println("bool="+book);
    16. }
    17. }
    18. }
    19. //bool=Book{name='三国演义', author='罗贯中', price=10.1}
    20. //bool=Book{name='小李飞刀', author='古龙', price=5.1}
    21. //bool=Book{name='红楼梦', author='曹雪芹', price=34.6}

    (3)练习题:

     //我的代码:

    1. package Collection_;
    2. import java.util.ArrayList;
    3. import java.util.Iterator;
    4. import java.util.List;
    5. public class CollectionExercise {
    6. @SuppressWarnings({"all"})
    7. public static void main(String[] args) {
    8. Dog dog1=new Dog("jack",1);
    9. Dog dog2=new Dog("tom",2);
    10. Dog dog3=new Dog("smith",3);
    11. ArrayList list=new ArrayList();
    12. list.add(dog1);
    13. list.add(dog2);
    14. list.add(dog3);
    15. System.out.println("用迭代器来遍历:");
    16. Iterator iterator=list.iterator();
    17. while (iterator.hasNext()) {
    18. Object next = iterator.next();
    19. System.out.println(list);
    20. }
    21. System.out.println("用增强for循环来遍历:");
    22. for (Object dog :list) {
    23. System.out.println(list);
    24. }
    25. }
    26. }
    27. class Dog{
    28. private String name;
    29. private int age;
    30. public Dog(String name, int age) {
    31. this.name = name;
    32. this.age = age;
    33. }
    34. public String getName() {
    35. return name;
    36. }
    37. public void setName(String name) {
    38. this.name = name;
    39. }
    40. public int getAge() {
    41. return age;
    42. }
    43. public void setAge(int age) {
    44. this.age = age;
    45. }
    46. @Override
    47. public String toString() {
    48. return "Dog{" +
    49. "name='" + name + '\'' +
    50. ", age=" + age +
    51. '}';
    52. }
    53. }
    54. //用迭代器来遍历:
    55. //[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
    56. //[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
    57. //[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
    58. //用增强for循环来遍历:
    59. //[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
    60. //[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
    61. //[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
    1. //改进:
    2. list.add(new Dog("jack",1));
    3. list.add(new Dog("tom",2));
    4. list.add(new Dog("smith",3));

  • 相关阅读:
    Java基于PHP+MySQL客户信息管理系统的设计与实现
    PPT文件不能编辑如何解决?
    Java百题大战
    JS函数调用方式
    Go语言学习(三)包的使用
    【论文精读3】MVSNet系列论文详解-P-MVSNet
    C# 32应用程序获取64位操作系统注册表
    微信支付 APP端 后端 第四-五弹 退款定时任务 账单下载
    网络直播是如何实现的——流媒体协议简介
    Java开发学习(二十八)----拦截器(Interceptor)详细解析
  • 原文地址:https://blog.csdn.net/weixin_72052233/article/details/128000328