ArrayList

ArrayList与数组的区别:

1. 数组和ArrayList的本质区别在于前者是类型安全的,而后者是类型不安全的.
2. ArrayList为了兼容所有类型对象,使用了Object数组,在使用元素的时候会有装箱和拆箱的操作,降低了程序的性能.
3. ArrayList会动态扩充容量,容量为原来的2倍.
4. ArrayList只有把元素添加进去之后才可以通过下标访问相应的元素.
5. 数组在创建的时候就已经确定了数据类型,并且它的长度是固定的,只能通过下标改变各个元素的值和访问.

如果已经知道数据的长度并且不需要频繁的做插入和删除操作,建议使用数组,反之亦然.

ArrayList泛型

ArrayList

案例一:

  • 某个班级的考试在系统上进行,成绩大致为 0 ~ 100之间
  • 现在需要先把成绩低于80分的数据去掉

  • 1.定义ArrayList集合存储多名学员的成绩。

  • 2.遍历集合每个元素,如果元素低于80分,去掉它。
public static void arrayListSeeAndDelete() {
        //目标;学习遍历并删除原数的正确方案
        // 1.创建一个ArrayList集合存储一个班级学生的成绩
        ArrayList scores = new ArrayList<>();
        scores.add(98);
        scores.add(77);
        scores.add(66);
        scores.add(89);
        scores.add(79);
        scores.add(50);
        scores.add(100);
        System.out.println(scores);
        /*
        方法一:
         */
        // 2.把低于80分的成绩从集合中去掉
        // scores = [98, 77, 66, 89, 79, 50, 100]
        // scores = [98, 77, 66, 89, 79, 50, 100]
       /* for (int i = 0; i < scores.size(); i++) {
            int score = scores.get(i);
            if (score < 80) {
                scores.remove(i);
                i--; //删除成功后,必须退一步才能保证后面不满足条件的元素不被跳过
            }
        }
        System.out.println(scores);*/
       /*
       方法二:
       倒着遍历再删除
        */
        for (int i = scores.size() - 1; i >= 0; i--) {
            int score = scores.get(i);
            if (score < 80) {
                scores.remove(i); // 可以避免跳过删除
        }

    }
}

案例二:

  • 定义电影类
  • 创建三个电影对象
  • 创建一个电影类型的ArrayList集合存储三部电影对象
  • 遍历电影类型中的每个电影对象,访问其信息并输出

电影类及其构造方法get/set方法。

public class ArrayListMovieShow {

    //目标:理解ArrayList集合存储自定义类型的对象
    // 1.定义电影类。 ArrayListMovieShow
    private String name;
    private double score;
    private String actor;

    public ArrayListMovieShow(String name, double score, String actor) {
        this.name = name;
        this.score = score;
        this.actor = actor;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    public String getActor() {
        return actor;
    }

    public void setActor(String actor) {
        this.actor = actor;
    }
}

主函数部分:

public static void main(String[] args) {
        // 2.创建三个电影类
        ArrayListMovieShow m1 = new ArrayListMovieShow("《肖申克的救赎》", 9.8, "罗宾斯");
        ArrayListMovieShow m2 = new ArrayListMovieShow("《霸王别姬》", 9.7, "张国荣、张丰毅");
        ArrayListMovieShow m3 = new ArrayListMovieShow("《阿甘正传》", 9.6, "汤姆·汉克斯");
        // 3.创建一个电影类型的ArrayList集合,存储三个电影对象
        ArrayList movies = new ArrayList<>();
        movies.add(m1);
        movies.add(m2);
        movies.add(m3);
        System.out.println(movies); //输出三个电影对象的地址
        // 4.遍历电影类型的集合中的每个电影对象。访问他的信息即可
        for (int i = 0; i < movies.size(); i++) {
            ArrayListMovieShow m = movies.get(i);
            System.out.println("电影名:" + m.getName());
            System.out.println("电影得分:" + m.getScore());
            System.out.println("电影主演:" + m.getActor());
            System.out.println("--------------------------------");
        }
    }

输出结果

`java
[javaBase.practice.ArrayListMovieShow@1b6d3586, javaBase.practice.ArrayListMovieShow@4554617c, javaBase.practice.ArrayListMovieShow@74a14482]
电影名:《肖申克的救赎》
电影得分:9.8
电影主演:罗宾斯
电影名:《阿甘正传》
电影得分:9.6
电影主演:汤姆·汉克斯

Original: https://www.cnblogs.com/zhangyouren/p/16412012.html
Author: Haziy
Title: ArrayList

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/574433/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • SpringMVC实战入门教程,四天带你快速搞定springmvc框架

    SpringMVC 也叫Spring web mvc。是Spring 框架的一部分,是在Spring3.0 后发布的。 这里对SpringMVC框架进行一个简单的介绍: sprin…

    Java 2023年6月9日
    060
  • springbean的生命周期

    作者:你的雷哥 出处:https://www.cnblogs.com/henuliulei/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保…

    Java 2023年5月30日
    073
  • 线程安全的 Set、List

    线程安全的Set: 综上可以看出,线程安全的 Set 底层选用 ConcurrentHashMap 的居多 线程安全的 List: Original: https://www.cn…

    Java 2023年5月30日
    0173
  • Dijkstra在路由选择中的应用

    Dijkstra在路由选择中的应用 前言背景 OSPF协议(Open Shortest Path First,开放最短路径优先)是在1989年由互联网工程任务组(IETF)正式发布…

    Java 2023年6月16日
    066
  • 20.多线程-基本代码

    示例一: 示例二: 主线程加入while循环,一直执行不退出。子线程会执行完毕,不会发生:子线程未执行完,主线程退出了,子线程被迫结束。 示例三: 子线程执行完了之后,主线程才会执…

    Java 2023年5月29日
    065
  • 1. 什么是微服务 ?

    1 . 什么是微服务 ? 微服务主要有两个关键词 : 微和服务 服务 : 实现某种业务逻辑的模块或应用 微 : 望文生义,就是小的意思 SOA(service-oriented a…

    Java 2023年6月8日
    076
  • 【全网最全】springboot整合JSR303参数校验与全局异常处理

    一、前言 我们在日常开发中,避不开的就是参数校验,有人说前端不是会在表单中进行校验的吗?在后端中,我们可以直接不管前端怎么样判断过滤,我们后端都需要进行再次判断, &#x4…

    Java 2023年6月15日
    074
  • Linux常用的命令

    1 常用的系统工作命令 man 命令用来查看man命令自身的帮助信息 MAN(1) Manual pager utils MAN(1) NAME man – an interfac…

    Java 2023年6月8日
    080
  • Spring Cloud Gateway 自定义断言(Predicate)

    1、类必须是Spring组件 Bean 2、类必须加上RoutePredicateFactory作为结尾 3、类必须继承AbstractRoutePredicateFactory …

    Java 2023年5月30日
    060
  • 深入Java微服务之网关系列1:什么是网关

    ​ 前言 近来,在想着重构一个新的产品。准备采用微服务的技术解决方案,来搭建基础设施框架。网关,是一个必不可少的组件。那么,网关到底是什么? 其又有什么特点或者特性,成为微服务必不…

    Java 2023年5月29日
    072
  • Maven 依赖调解源码解析(四):传递依赖,第一声明者优先

    本文是系列文章《Maven 源码解析:依赖调解是如何实现的?》第四篇,主要介绍依赖调解的第二条原则:传递依赖,第一声明者优先。请按顺序阅读其他系列文章,系列文章总目录参见:http…

    Java 2023年6月16日
    095
  • 三种常用的辅助工具类

    三种常用的辅助工具类 CountDownLatch 是一个执行减法操作的辅助计数器 undefined CyclicBarrier undefined public class C…

    Java 2023年6月5日
    064
  • m

    mybatis-plus配置文件 在MybatisPlusInterceptor下添加DynamicTableNameInnerInterceptor @Configuration…

    Java 2023年5月30日
    098
  • 2022-8-11 网络编程(网络通信)

    网络协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这…

    Java 2023年6月13日
    058
  • MySQL:单/多服务器 Docker 容器下 MySQL 的主从复制

    主从复制数据库集群:主库,负责写入数据(insert,update,delete),我们称为写库;从库,负责数据的读取(select),我们称为读库;实现数据库的读写分离。 主从两…

    Java 2023年6月7日
    082
  • 如何使用(扫描)二维码进行登录

    一、项目背景 &#x8FD9;&#x662F;&#x6211;&#x52A0;&#x5165;&#x535A;&#x5BA2…

    Java 2023年6月14日
    069
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球