JavaSE学习day9 集合(基础班结束)

news2024/12/26 0:58:22

1.ArrayList

集合和数组的优势对比:

  1. 长度可变

  2. 添加数据的时候不需要考虑索引,默认将数据添加到末尾

  3. 不能存基本数据类型。只能通过包装。

1.1ArrayList类概述

  • 什么是集合

    提供一种存储空间可变的存储模型,存储的数据容量可以发生改变

  • ArrayList集合的特点

    底层是数组实现的,长度可以变化

  • 泛型的使用

    用于约束集合中存储元素的数据类型,这个通过下面就可以知道了。

1.2ArrayList类常用方法

1.2.1构造方法

方法名说明
public ArrayList()创建一个空的集合对象

如创建一个集合:

 尖括号里限定数据类型,可以是引用类型,比如String、类等。但是不能是基本数据类型,第一行代码我们限定数据类型的时候发现代码已经报错了。今后在写集合的时候,创建对象都是用第三种写法。创建第一个对象的时候之所以出错是因为前面说了,集合不能存储基本数据类型。第二个对象是老程序员的写法。而第三个创建对象是JDK7版本后的新特性,是我们现在主流的写法。

1.2.2成员方法

方法名说明
public boolean remove(Object o)删除指定的元素,返回删除是否成功
public E remove(int index)删除指定索引处的元素,返回被删除的元素
public E set(int index,E element)修改指定索引处的元素,返回被修改的元素
public E get(int index)返回指定索引处的元素
public int size()返回集合中的元素的个数
public boolean add(E e)将指定的元素追加到此集合的末尾
public void add(int index,E element)在此集合中的指定位置插入指定的元素

1.2.3示例代码

public class ArrayListDemo02 {
    public static void main(String[] args) {
        //创建集合
        ArrayList<String> array = new ArrayList<String>();
​
        //添加元素
        array.add("hello");
        array.add("world");
        array.add("java");
​
        //public boolean remove(Object o):删除指定的元素,返回删除是否成功
//        System.out.println(array.remove("world"));//true
//        System.out.println(array.remove("javaee"));false
​
        //public E remove(int index):删除指定索引处的元素,返回被删除的元素
//        System.out.println(array.remove(1));
​
        //IndexOutOfBoundsException
//        System.out.println(array.remove(3));
​
        //public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
//        System.out.println(array.set(1,"javaee"));
​
        //IndexOutOfBoundsException
//        System.out.println(array.set(3,"javaee"));
​
        //public E get(int index):返回指定索引处的元素
//        System.out.println(array.get(0));
//        System.out.println(array.get(1));
//        System.out.println(array.get(2));
        //System.out.println(array.get(3)); //?????? 自己测试
​
        //public int size():返回集合中的元素的个数
        System.out.println(array.size());
​
        //输出集合
        System.out.println("array:" + array);
    }
}

这个案例还是有必要说一下这几个方法:

public boolean add(E e)这个方法:

这个方法的返回值永远是true。我们转到该方法的定义下查看返回值:

public void add(int index,E element)这个方法:

比较特殊,这个方法没有返回值,但是如果出现索引不合法会抛出异常

public boolean remove(Object o)这个方法:

它的返回值是true或者false,表示删除成功、删除失败。

public E remove(int index)这个方法:

如果删除成功,则返回该索引下的值,若删除失败,则抛出一个异常。

1.3ArrayList存储字符串并遍历

1.3.1案例需求

创建一个存储字符串的集合,存储3个字符串元素,使用程序实现在控制台遍历该集合

1.3.2代码实现

/*
    思路:
        1:创建集合对象
        2:往集合中添加字符串对象
        3:遍历集合,首先要能够获取到集合中的每一个元素,这个通过get(int index)方法实现
        4:遍历集合,其次要能够获取到集合的长度,这个通过size()方法实现
        5:遍历集合的通用格式
 */
public class ArrayListTest01 {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList<String> array = new ArrayList<String>();
​
        //往集合中添加字符串对象
        array.add("刘正风");
        array.add("左冷禅");
        array.add("风清扬");
​
        //遍历集合,其次要能够获取到集合的长度,这个通过size()方法实现
//        System.out.println(array.size());
​
        //遍历集合的通用格式
        for(int i=0; i<array.size(); i++) {
            String s = array.get(i);
            System.out.println(s);
        }
    }
}

1.4ArrayList存储学生对象并遍历

1.4.1案例需求

创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合

1.4.2代码实现

/*
    思路:
        1:定义学生类
        2:创建集合对象
        3:创建学生对象
        4:添加学生对象到集合中
        5:遍历集合,采用通用遍历格式实现
 */
public class ArrayListTest02 {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList<Student> array = new ArrayList<>();
​
        //创建学生对象
        Student s1 = new Student("林青霞", 30);
        Student s2 = new Student("风清扬", 33);
        Student s3 = new Student("张曼玉", 18);
​
        //添加学生对象到集合中
        array.add(s1);
        array.add(s2);
        array.add(s3);
​
        //遍历集合,采用通用遍历格式实现
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            System.out.println(s.getName() + "," + s.getAge());
        }
    }
}

1.5ArrayList存储学生对象并遍历升级版

1.5.1案例需求

创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合

学生的姓名和年龄来自于键盘录入

1.5.2代码实现

public class ArrayListTest {
    public static void main(String[] args) {
        //1.创建集合对象
        ArrayList<Student> list = new ArrayList<>();
        //2.键盘录入数据并添加到集合中
        Scanner sc = new Scanner(System.in);
        for (int i = 1; i <= 3; i++) {
            //创建学生对象
            Student s = new Student();
            //键盘录入学生信息
            System.out.println("请输入第" + i + "个学生的姓名");
            String name = sc.next();
            System.out.println("请输入第" + i + "个学生的年龄");
            int age = sc.nextInt();
            //把学生信息赋值给学生对象
            s.setName(name);
            s.setAge(age);
           //把学生对象添加到集合当中
            list.add(s);
        }
        //遍历
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            System.out.println(stu.getName() + ", " + stu.getAge());
        }
    }
}

1.6 查找用户是否存在

需求:

1,main方法中定义一个集合,存入三个用户对象。

用户属性为:id,username,password

2,要求:定义一个方法,根据id查找对应的学生信息。

如果存在,返回true

如果不存在,返回false

代码示例:

package com.itheima.test4;
​
import java.util.ArrayList;
​
public class ArrayListTest {
    public static void main(String[] args) {
        //1.创建集合
        ArrayList<User> list = new ArrayList<>();
        //2.添加用户对象
        User u1 = new User("heima001","zhangsan","123456");
        User u2 = new User("heima002","lisi","1234");
        User u3 = new User("heima003","wangwu","12345");
        //3.添加元素
        list.add(u1);
        list.add(u2);
        list.add(u3);
        //3.根据id查找是否存在
        //调方法
        //如果调用本类中的方法,直接写方法名就可以。
        //如果我要调用其他类中的方法,需要用对象去调用。
        boolean flag = contains(list, "heima004");
        System.out.println(flag);
    }
​
    //1.我要干嘛? 判断id在集合中是否存在
    //2.需要什么? 集合  id
    //3.是否需要继续使用?需要
    //写在测试类中的方法,加static
    //写在javabean类中的方法,不加static
    public static boolean contains(ArrayList<User> list, String id){
        for (int i = 0; i < list.size(); i++) {
            User u = list.get(i);
            String uid = u.getId();
            if(uid.equals(id)){
                return true;
            }
        }
        //当集合里面所有的元素全部比较完毕了
        //如果此时还不存在,才能返回false
        return false;
    }
}
​

1.7 查找用户的索引

需求:

1,main方法中定义一个集合,存入三个用户对象。

用户属性为:id,username,password

2,要求:定义一个方法,根据id查找对应的学生信息。

如果存在,返回索引

如果不存在,返回-1

代码示例:

package com.itheima.test5;
​
import com.itheima.test4.User;
​
import java.util.ArrayList;
​
public class ArrayListTest {
    public static void main(String[] args) {
        //1.创建集合
        ArrayList<User> list = new ArrayList<>();
        //2.添加用户对象
        User u1 = new User("heima001","zhangsan","123456");
        User u2 = new User("heima002","lisi","1234");
        User u3 = new User("heima003","wangwu","12345");
        //3.添加元素
        list.add(u1);
        list.add(u2);
        list.add(u3);
​
        //4.查询索引
        int index = findIndex(list, "heima004");
        System.out.println(index);
​
    }
​
    //1.我要干嘛?查询索引
    //2.需要什么?集合  id
    //3.是否需要继续使用 需要返回值
    public static int findIndex(ArrayList<User> list, String id){
        for (int i = 0; i < list.size(); i++) {
            User u = list.get(i);
            String uid = u.getId();
            if(uid.equals(id)){
                return i;
            }
        }
        //如果循环结束还没有找到
        return -1;
    }
    public static boolean contains(ArrayList<User> list, String id){
        int index = findIndex(list, id);
        if(index >= 0){
            return true;
        }else{
            return false;
        }
       // return  findIndex(list, id) >= 0;
    }
}
​

再次强调一遍,在测试类中写方法要加上static关键字修饰,而在Javabean类中写的方法不用static修饰。而且这两个类里的方法调用格式也不同:

在测试类中,调用方法直接写本方法名就可以了

而在Javabean类中,需要用对象去调用。这些前面都讲过。

好了,基础班的学习到此结束,希望大家缓一缓脚步,把前面的知识点和代码多练练,多敲一敲代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/360659.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

shell脚本中那些关于时间的处理方案,你都掌握了吗?

文章目录前言一. linux中关于时间的命令有哪些&#xff1f;1.1 命令一: hwclock命令二&#xff1a;date的那些事二. 时间命令在脚本中的应用2.1 用date命令实现统计执行时间的脚本2.2 time命令3. sleep命令总结前言 大家好&#xff0c;我是互联网老辛&#xff0c;专注云原生领…

[Css]Grid属性简单陈列(适合开发时有基础的快速过一眼)

[css进阶]Grid属性简介 文章目录[css进阶]Grid属性简介典型需求网格容器的属性displaygrid-template-columns和grid-template-rowsgrid-template-areasgrid-templategrid-column-gap grid-row-gapgrid-gapjustify-itemsalign-itemsjustify-contentalign-contentgrid-auto-colum…

【面试题】ES6 如何将 Set 转化为数组

大厂面试题分享 面试题库后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库Set 是 ES6 中新增的一种集合类型&#xff0c;类似于数组&#xff0c;但其成员的值是唯一的&#xff0c;即不会重复。关于Set&#xff0c;可以阅…

Leaf说明

什么是Leafleaf是叶子的意思我们使用的Leaf是美团公司开源的一个分布式序列号(id)生成系统我们可以在Github网站上下载项目直接使用为什么需要Leaf上面的图片中是一个实际开发中常见的读写分离的数据库部署格式专门进行数据更新(写)的有两个数据库节点它们同时新增数据可能产生…

ThinkPHP5篮球培训报名系统

有需要请私信或看评论链接哦 可远程调试 ThinkPHP5篮球培训报名系统一 介绍 此篮球培训报名系统基于ThinkPHP5框架开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。用户可注册登录&#xff0c;充值&#xff0c;报名&#xff0c;反馈信息等&…

手摸手快速入门 正则表达式 (Vue源码中的使用)

vue2源码 在 vue2 源码的 src\compiler\parser\html-parser.js 文件中 里面有大量的正则表达式&#xff0c;如下图 可以看到非常的长&#xff0c;不是我说&#xff0c;就前几行&#xff0c;如果没有相关的 正则表达式 的工具&#xff0c;我可能就被劝退了&#x1f62d; 这里…

反沙箱CobaltStrike木马加载器分析

前言 近日&#xff0c;笔者参加了浙江护网&#xff0c;在攻击队停止攻击的那一天凌晨&#xff0c;Windows服务器被攻破大量失分&#xff0c;早晨溯源时拿到了这一份名为chrome.exe的木马样本。 木马HASH SHA256:7fbe93d7c29b4ea4ce918f3d16a74d2930120f44d00862bdc0a1f82899…

ubuntu server系统树莓派安装mysql8.0开启远程访问

文章目录前言博客一、安装mysql8.0二、创建一个远程访问的新用户三、在MySQL配置文件中启用远程访问。四、navicat15连接mysql8.0返回10061chatgpt回复前言 百度了半天没解决&#xff0c;问了下chatgpt成功解决了…… 博客 一、安装mysql8.0 确认MySQL 8.0服务器已安装并正在…

【ESP32-S3】Pycharm 使用 microPython 教程(避坑)

一、下载Pycharm等操作 1.百度云下载链接 链接&#xff1a;https://pan.baidu.com/s/1tkbMzS5B_v-Cn4WQlTqS3Q?pwd0108 提取码&#xff1a;0108 2.安装 按照压缩包中的教程来&#xff0c;你懂的。 二、配置microPython环境 1.安装 microPython 插件 1.1 File > Sett…

【云原生】k8s之Yaml文件详解

一、K8S支持的文件格式 kubernetes支持YAML和JSON文件格式管理资源对象。 JSON格式&#xff1a;主要用于api接口之间消息的传递YAML格式&#xff1a;用于配置和管理&#xff0c;YAML是一种简洁的非标记性语言&#xff0c;内容格式人性化&#xff0c;较易读 1、yaml和json的主…

企业级信息系统开发学习笔记1.5 初探Spring AOP

文章目录零、本讲学习目标一、Spring AOP&#xff08;一&#xff09;AOP基本含义&#xff08;二&#xff09;AOP基本作用&#xff08;三&#xff09;AOP与OOP对比&#xff08;四&#xff09;AOP使用方式&#xff08;五&#xff09;AOP基本概念二、提出游吟诗人唱赞歌任务&#…

手把手教你做插件(2)模块大串联

0&#xff0c;前言 这篇文章笔记比较简略&#xff0c;大部分的操作都是和上一篇文章重复了&#xff0c;建议先看上一节文章&#xff0c;直达电梯&#xff1a;UE4 手把手教你做插件&#xff08;1&#xff09; 从代码引用插件_asiwxy的博客-CSDN博客UE4 手把手教你创建插件https:…

Windows10神州网信政府版麦克风、摄像头的使用

Windows10神州网信政府版默认麦克风摄像头是禁用状态&#xff0c;此禁用状态符合版本规定。 在录课和直播过程中&#xff0c;如果需要使用麦克风和摄像头的功能&#xff0c;可以这样更改&#xff1a; 1、鼠标右键点击屏幕左下角的开始菜单图标&#xff0c;选择windows中的“运…

[6/101] 101次软件测试面试之经典面试题剖析

01、自我介绍答&#xff1a;大家好&#xff0c;我是一名软件测试工程师&#xff0c;但我更喜欢称自己为“软件bug捕手”。我相信&#xff0c;软件测试工程师的使命就是让软件更加健壮、更加可靠、更加美好。我们就像是一群“特警”&#xff0c;在黑暗的代码中寻找漏洞和缺陷&am…

spring boot——自定义依赖实现自动配置

需求 要实现的功能是&#xff1a;实现一个可以支持miniooss两种方式&#xff0c;上传下载文件的自定义依赖。其中还包括一些创建桶、删除桶、删除文件等功能&#xff0c;但是最主要的是实现自动配置。 如果对spring理解很深的话&#xff0c;自动配置这些东西很容易理解&#…

php获取api接口数据的方法

API是应用程序的开发接口&#xff0c;在开发程序的时候&#xff0c;我们有些功能可能不需要从到到位去研发&#xff0c;我们可以拿现有的开发出来的功能模块来使用&#xff0c;而这个功能模块&#xff0c;就叫做库(libary)。比如说&#xff1a;要实现数据传输的安全&#xff0c…

传输层TCP与UDP协议

目录 传输层 传输层功能 传输层所提供的服务 传输层的两个协议 TCP协议与UDP协议 端口 端口分类 IP地址和端口的关系 UDP协议 前言&#xff1a; UDP报文格式 检验和的伪首部 伪首部内容 TCP协议 TCP报文格式 TCP协议数据段的理解 TCP的伪首部 伪首部内容 标…

基于Jeecgboot前后端分离的ERP系统开发系列--出库单(3)

继续对销售出库单进行完善与处理 一、列表显示状态 目前先给出库表单两种状态&#xff0c;未审核与审核通过状态&#xff0c;前端通过下面调整 { title:状态, align:"center", dataIndex: status, customRender:f…

Netty(四):优化与源码

文章目录1. 优化1.1 扩展序列化算法1.2 参数调优1&#xff09;CONNECT_TIMEOUT_MILLIS2&#xff09;SO_BACKLOG3&#xff09;ulimit -n4&#xff09;TCP_NODELAY5&#xff09;SO_SNDBUF & SO_RCVBUF6&#xff09;ALLOCATOR7&#xff09;RCVBUF_ALLOCATOR1.3 RPC 框架1&…

IDEA性能优化设置(解决卡顿问题)修改内存

在我们日常使用IDEA进行开发时&#xff0c;可能会遇到许多卡顿的瞬间&#xff0c;明明我们的机器配置也不低啊&#xff1f;为什么就会一直卡顿呢&#xff1f; 原来这是因为IDEA软件在我们安装的时候就设置了默认的内存使用上限&#xff08;通常很小&#xff09;&#xff0c;这就…