集合的框架体系和Collection接口

news/2024/11/17 17:50:19/

1.集合的理解和好处

前面我们保存多个数据使用的是数组,那么数组有不足的地方,我们分析一下

1.1数组

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

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

3)使用数组进行增加/删除元素的示例代码-比较麻烦

1671431460177

1.2 集合

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

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

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

2 集合的框架体系(背下来)

Java 的集合类很多,主要分为两大类,如图 :[背下来]

Collection接口和Map接口

集合主要是两组(单列集合 , 双列集合)
Collection 接口有两个重要的子接口 List Set , 他们的实现子类都是单列集合
Map 接口的实现子类 是双列集合,存放的 K-V

1671432284518

1671432424478

public class Collection_ {@SuppressWarnings({"all"})public static void main(String[] args) {//老韩解读//1. 集合主要是两组(单列集合 , 双列集合)//2. Collection 接口有两个重要的子接口 List Set , 他们的实现子类都是单列集合//3. Map 接口的实现子类 是双列集合,存放的 K-V//4. 把老师梳理的两张图记住//Collection//MapArrayList arrayList = new ArrayList();arrayList.add("jack");arrayList.add("tom");HashMap hashMap = new HashMap();hashMap.put("NO1", "北京");hashMap.put("NO2", "上海");}
}

3 Collection 接口和常用方法

3.1 Collection 接口实现类的特点

1671433100405

Collection 接口常用方法,以实现子类 ArrayList 来演示

public class CollectionMethod {@SuppressWarnings({"all"})public static void main(String[] args) {List list = new ArrayList();
//        add:添加单个元素list.add("jack");list.add(10);//list.add(new Integer(10))list.add(true);System.out.println("list=" + list);
//        remove:删除指定元素//list.remove(0);//删除第一个元素list.remove(true);//指定删除某个元素System.out.println("list=" + list);
//        contains:查找元素是否存在System.out.println(list.contains("jack"));//T
//        size:获取元素个数System.out.println(list.size());//2
//        isEmpty:判断是否为空System.out.println(list.isEmpty());//F
//        clear:清空list.clear();System.out.println("list=" + list);
//        addAll:添加多个元素ArrayList list2 = new ArrayList();list2.add("红楼梦");list2.add("三国演义");list.addAll(list2);System.out.println("list=" + list);
//        containsAll:查找多个元素是否都存在System.out.println(list.containsAll(list2));//T
//        removeAll:删除多个元素list.add("聊斋");list.removeAll(list2);System.out.println("list=" + list);//[聊斋]
//        说明:以ArrayList实现类来演示.}
}

3.2 Collection 接口遍历元素方式 1-使用 Iterator(迭代器)

1671433958499

1671434125832

1671434241092

提示:在调用iterator.next()方法之前必须要调用iterator.hasNext()进行检测。若不调用且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常。

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class CollectionIterator {@SuppressWarnings({"all"})public static void main(String[] args) {Collection col = new ArrayList();col.add(new Book("三国演义", "罗贯中", 10.1));col.add(new Book("小李飞刀", "古龙", 5.1));col.add(new Book("红楼梦", "曹雪芹", 34.6));//System.out.println("col=" + col);//现在老师希望能够遍历 col集合//1. 先得到 col 对应的 迭代器Iterator iterator = col.iterator();//2. 使用while循环遍历
//        while (iterator.hasNext()) {//判断是否还有数据
//            //返回下一个元素,类型是Object
//            Object obj = iterator.next();
//            System.out.println("obj=" + obj);
//        }//老师教大家一个快捷键,快速生成 while => itit//显示所有的快捷键的的快捷键 ctrl + jwhile (iterator.hasNext()) {Object obj = iterator.next();System.out.println("obj=" + obj);}//3. 当退出while循环后 , 这时iterator迭代器,指向最后的元素//   iterator.next();//NoSuchElementException//4. 如果希望再次遍历,需要重置我们的迭代器iterator = col.iterator();System.out.println("===第二次遍历===");while (iterator.hasNext()) {Object obj = iterator.next();System.out.println("obj=" + obj);}}
}class Book {private String name;private String author;private double price;public Book(String name, String author, double price) {this.name = name;this.author = author;this.price = price;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +'}';}
}

3.3 Collection 接口遍历对象方式 2-for 循环增强

1671434974782

import java.util.ArrayList;
import java.util.Collection;public class CollectionFor {@SuppressWarnings({"all"})public static void main(String[] args) {Collection col = new ArrayList();col.add(new Book("三国演义", "罗贯中", 10.1));col.add(new Book("小李飞刀", "古龙", 5.1));col.add(new Book("红楼梦", "曹雪芹", 34.6));//老韩解读//1. 使用增强for, 在Collection集合//2. 增强for, 底层仍然是迭代器//3. 增强for可以理解成就是简化版本的 迭代器遍历//4. 快捷键方式 I
//        for (Object book : col) {
//            System.out.println("book=" + book);
//        }for (Object o : col) {System.out.println("book=" + o);}//增强for,也可以直接在数组使用
//        int[] nums = {1, 8, 10, 90};
//        for (int i : nums) {
//            System.out.println("i=" + i);
//        }}
}

4 练习

1.创建3个Dog {name, age} 对象,放入到 ArrayList中,赋给List 引用

2.用迭代器和增强for循环两种方式来遍历

3.重写Dog的toString方法,输出name和age

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class Homework1 {public static void main(String[] args) {List list = new ArrayList();list.add(new Dog("狗狗1",5));list.add(new Dog("狗狗2",6));list.add(new Dog("狗狗3",5));System.out.println(list);//使用迭代器来遍历Iterator iterator = list.iterator();while (iterator.hasNext()){Object next = iterator.next();System.out.println(next);}//使用增强for循环来遍历System.out.println("增强for循环");for (Object d : list){System.out.println(d);}}
}class Dog{private String name;private int age;public Dog(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +", age=" + age +'}';}
}

http://www.ppmy.cn/news/4946.html

相关文章

通过项目下的包名获取包下的全部类

通过项目下的包名获取包下的全部类 关键点: ClassLoader.getResources() 返回给定包目录下所有资源。 是一个非静态方法,它只能通过类对象访问,如果我们尝试使用类名访问方法,那么我们将得到一个错误。 方法可能在返回资源时抛出…

2023年大学毕业生,我有话想对你说

虽然每年都说大学毕业生有多少多少,就业难,但貌似以往的经济寒冬,互联网寒冬都不如2022年2023年这么寒冷。 可以说,2022年一整年都是在裁员的声音中度过的,有的公司逐渐取消年终奖,原本熙熙攘攘的办公室&am…

【Linux磁盘管理】

Linux磁盘管理 写在前面 在此强调一个 Linux 的核心机制就是一切皆文件。 I/O Ports 即I/O 设备地址,用来标识硬件对应的设备地址,来让操作系统以及 cpu 使用。 CPU 的核数不一定就是越多越好,由于CPU 协调之间的协调问题,可能性…

MySQL#2(数据模型,SQL通用语法,SQL分类)

目录 一.数据模型 二.SQL通用语法 三.SQL的分类 1.DDL DDL---操作数据库 DDL---操作表 2.DML DML---操作数据 3.DQL(重点) 基础查询 条件查询 排序查询 分组查询 分页查询 扩展: 聚合函数 一.数据模型 数据库在内存中是以文件夹的方式存在 数据表和数据是以文件的形式存…

3年经验去面试20k测试岗,看到这样的面试题我还是心虚了....

我是着急忙慌的准备简历——3年软件测试经验,可独立测试大型产品项目,熟悉项目测试流程...薪资要求?3年测试经验起码能要个20K吧 我加班肝了一页半简历,投出去一周,面试电话倒是不少,自信满满去面试&#…

神州数码交换机CS6200命令学习(三)

1. Loopback-detection 端口环路检测 Loopback-detection interval-time xx xx 设置恢复环路检测的时间间隔 Loopback-detection specified-vlan xx 进入接口,启动端口环路检测功能 Loopback-detection control 进入接口,打开端口环路控制方式&…

sync.Map中amended和Delete删除中nil和expunged的理解

结论 amended: 意思是被修改过的,为true就是表明dirty和readOnly中的map的数据不相同了 readOnly中的map数据为nil: 就是正常的Delete()操作会让readOnly中的map数据值为nil,key还在 readOnly中的map数据被标记为expunged(擦去;删掉): 就是只…

【现代密码学原理】——期末复习(冲刺篇)

📖 前言:快考试了,做篇期末总结,都是重点与必考点。 博主预测考点: 计算题:RSA、Diffie-Hellman密钥交换、EIGamal 密钥交换、使用SHA-512算法,计算消息的Hash值、计算消息的HMAC 应用题&#…