首页 > 编程语言 >Java 集合—ArrayList

Java 集合—ArrayList

时间:2023-11-12 17:32:34浏览次数:36  
标签:Java int ArrayList sites System println 集合 out

ArrayList介绍

ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。

ArrayList 类位于 java.util 包中,使用前需要引入它,语法格式如下:

import java.util.ArrayList; // 引入 ArrayList 类

ArrayList<E> objectName =new ArrayList<>();  // 初始化
  • E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型
  • objectName: 对象名。

ArrayList<Integer> objectName =new ArrayList<>();

ArrayList<Character> objectName =new ArrayList<>();


ArrayList 继承于 AbstractList ,实现了 ListRandomAccessCloneablejava.io.Serializable 这些接口。

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable{

  }
  • List : 表明它是一个列表,支持添加、删除、查找等操作,并且可以通过下标进行访问。
  • RandomAccess :这是一个标志接口,表明实现这个接口的 List 集合是支持 快速随机访问 的。在 ArrayList 中,我们即可以通过元素的序号快速获取元素对象,这就是快速随机访问。
  • Cloneable :表明它具有拷贝能力,可以进行深拷贝或浅拷贝操作。
  • Serializable : 表明它可以进行序列化操作,也就是可以将对象转换为字节流进行持久化存储或网络传输,非常方便。

ArrayList 和 Vector 的区别?(了解即可)

  • ArrayListList 的主要实现类,底层使用 Object[]存储,适用于频繁的查找工作,线程不安全 。
  • VectorList 的古老实现类,底层使用Object[] 存储,线程安全。

ArrayList 可以添加 null 值吗?


#补充说明

这里补充一点比较重要,但是容易被忽视掉的知识点:

  • Java 中的 length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了 length 这个属性.
  • Java 中的 length() 方法是针对字符串说的,如果想看这个字符串的长度则用到 length() 这个方法.
  • Java 中的 size() 方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看!


ArrayList增、删、改、查

ArrayList 是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
      	// 1、创建集合
        ArrayList<String> sites = new ArrayList<String>();
      	
        // 2、添加元素
        sites.add("Google");		//----ida快捷键Ctrl+D下一行复制
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
      	
      	// 3、访问元素
      	System.out.println(sites.get(1));  // 访问第二个元素
      	
      	// 4、修改元素
        sites.set(2, "Wiki"); // 第一个参数为索引位置,第二个为要修改的值
      	
        System.out.println(sites);
      	
      	// 5、删除元素
      	sites.remove(3); // 删除第四个元素
      	System.out.println(sites);
      	
      	// 6、遍历元素
      	for (int i = 0; i < sites.size(); i++) {
            System.out.println(sites.get(i));
        }
      	// 也可以使用 for-each 来迭代元素:
      	for (String i : sites) {
            System.out.println(i);
        }
      	
      	//  sort() 方法可以对字符或数字列表进行排序
        sites.add("Wiki");
        sites.add("Runoob");
        Collections.sort(sites);
        for (String i : sites) {
            System.out.println(i);
        }
      	
        // 检查 Runoob 是否在这个数组中
        System.out.print("Runoob是否存在于arraylist: ");
        System.out.println(sites.contains("Runoob"));

      	// arraylist.indexOf(Object obj)  返回动态数组中元素的索引值
        // 查找位置索引值为 Runoob 的元素
        int position1 = sites.indexOf("Runoob");
        System.out.println("Runoob 的索引位置: " + position1);
        // 查找位置索引值为 Weibo 的元素
        int position2 = sites.indexOf("Weibo");
        System.out.println("Weibo 的索引位置: " + position2);    // 如果动态数组中不存在指定的元素,则该 indexOf() 方法返回 -1

        // arraylist.isEmpty()  检查该数组是否为空
        boolean result = sites.isEmpty();   // false
        System.out.println("sites 是否为空? " + result);

        // arraylist.subList(int fromIndex, int toIndex)  用于截取并返回动态数组中的一部分
        System.out.println();
        System.out.println(sites);
        System.out.println("SubList:" + sites.subList(2, sites.size()));


        // arraylist.toArray(T[] arr)   ---将Arraylist对象转换为数组T[]arr(可选参数)-用于存储数组元素的数组
        System.out.println();
        /**
         * 创建一个新的String类型的数组, 数组长度和 ArrayList 长度一样
         * String[] arr = new String[sites.size()];
         * sites.toArray(arr);
         */
        Object[] obj = sites.toArray();     //该方法没有参数
        for (int i = 0; i < obj.length; i++) {
            System.out.println(obj[i]);
        }

        // arraylist.toString() 将Arraylist对象转换为字符串
        String str = sites.toString();
        System.out.println("String:" + str);


        // arraylist.removeRange(int fromIndex, int toIndex)  用于删除指定索引之间存在的元素
        //sites.removeRange(1, 2);

        // arraylist.clear() 删除所有元素
        sites.clear();
        System.out.println("所有 clear() 方法后: " + sites);
      	
    }
}


练习题1:

【添加学生对象并遍历】定义一个集合,添加一些学生对象,并进行遍历学生类的属性为:姓名、年龄

要求:对象的数据来自键盘录入

构造 Student javabean

package list.demo.com;

public class Student {
    // 标准JavaBean: 1、私有化成员变量   2、空参构造器方法      3、带参数构造器方法    4、set/get方法
    private String name;
    private int age;

    public Student() {
        // 快捷键——Arlt+Insert-构造参数—无选择select none
    }

    public Student(String name, int age) {
        // 快捷键——Arlt+Insert-构造参数—全选属性-确定
        this.name = name;
        this.age = age;
    }

    public String getName() {
        // 快捷键——Arlt+Insert-构造参数—getter和setter-全选-确定
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}


package list.demo.com;

import java.util.ArrayList;

public class TestAddStudents {
    public static void main(String[] args) {
        // 创建学生集合
        ArrayList<Student> list = new ArrayList<>();
				
        //创建学生对象
        Student s1 = new Student("张三",23);
        Student s2 = new Student("李四",25);
        Student s3 = new Student("王武",27);
        
        // 添加学生属性
        list.add(s1);
        list.add(s2);
        list.add(s3);

        System.out.println(list.size());

        for (int i = 0; i < list.size(); i++) {
            Student s = list.get(i);
            System.out.println(s.getName() +","+ s.getAge());
        }

    }
}


package list.demo.com;

import java.util.ArrayList;
import java.util.Scanner;

public class TestAddStudentsList {
    public static void main(String[] args) {
        // 创建学生集合
        ArrayList<Student> list = new ArrayList<>();

        // 键盘录入学生信息
        Scanner sc = new Scanner(System.in);
        //for (int i = 0; i < list.size(); i++) {
        for (int i = 0; i < 3; i++) {
            Student stu = new Student();

            System.out.println("请输入学生姓名:");
            String name = sc.next();

            System.out.println("请输入学生年龄:");
            int age = sc.nextInt();

            // 把name、age赋值给学生对象
            stu.setName(name);
            stu.setAge(age);

            // 把学生对象添加到集合中
            list.add(stu);
        }

        System.out.println(list.size());

        for (int i = 0; i < list.size(); i++) {
            // 通过i索引 获取学生对象
            Student s = list.get(i);
            System.out.println(s.getName() +","+ s.getAge());
        }

    }
}

输出结果:

请输入学生姓名:
张三
请输入学生年龄:
23
请输入学生姓名:
李四
请输入学生年龄:
25
请输入学生姓名:
王武
请输入学生年龄:
27
3
张三,23
李四,25
王武,27




标签:Java,int,ArrayList,sites,System,println,集合,out
From: https://blog.51cto.com/u_15520037/8330222

相关文章

  • 本机Java连接虚拟机的redis相关
    1、代码Jedisjedis=newJedis("192.168.88.151",6379);2、开启6379端口//查看6379端口是否开启--yes是开启;no是关闭firewall-cmd--query-port=6379/tcp//开启6379端口firewall-cmd--zone=public--add-port=6379/tcp--permanent//重启使生效firewall-cmd--reloa......
  • Java零基础入门-运算符
    前言Java作为一种广泛应用的编程语言,其有丰富的运算符用于程序的编写。掌握Java的运算符是学习Java编程的基础之一,在本文中,我们将讨论Java中各种运算符的使用方法,以帮助初学者更好地理解Java运算符的使用。摘要本文旨在为初学者提供关于Java运算符的详细介绍。本文涵盖的运算符......
  • JavaWeb--HTTP简介
     请求数据的格式 post请求和get请求的区别 响应数据格式 状态码 常见响应状态码 使用tomcat可以省略http之间交流的代码 ......
  • java helloworld
    test.javapcakagemyclass//这个地方打包,表示类test是归属于myclass包的,而test.java文件是放在myclass文件夹中的,文件夹的名称与包名是对应的publicclasstest{//anapplicationpublicstaticvoidmain(String[]args){System.out.println("HelloWorld!");}}......
  • Java包装类
    包装类为什么要有包装类?Java是一个面向对象的编程语言,基本数据类型并不具有对象的性质,为了让基本类型也具有对象的特性,就出现了包装类型。就比如在Collection集合中就存放的一定是包装类型而并非是基本的数据类型。Java中基本数据类型转成包装类型:自动装箱和自动拆箱自动装......
  • Java SPI机制总结系列之万字详细图解SPI源码分析
    原创/朱季谦我在《JavaSPI机制总结系列之开发入门实例》一文当中,分享了JavaSPI的玩法,但是这只是基于表面的应用。若要明白其中的原理实现,还需深入到底层源码,分析一番。这里再重温一下SPI机制的概念:SPI,是ServiceProviderInterface的缩写,即服务提供者接口,单从字面上看,可以这......
  • 面试官:听说你很了解Java8特性,给我优化一下这段代码吧?
    @[toc]前言在之前的一次面试过程中,我被问到了一道代码优化题:对于下面的代码,你有什么优化的思路呢?booleanhandleStrList(StringstrList){ for(Strings:strList){ if(s.length()%2==0){ returntrue; } }booleanhandleStrList(StringstrList){for(Strings:s......
  • JavaScript的数据交换格式XML和JSON的解析------前端
    XML和JSON数据的解析<!DOCTYPEhtml><!--这是HTML的注释--><htmllang="en"id="myHtml"> <head> <!--这里不是设置了编码,而是告诉浏览器,用什么编码方式打开文件避免乱码--> <metacharset="UTF-8"> <metaname="viewport&quo......
  • JavaScript--正则表达式
    正则表达式判断用户名/密码varreg=/^\w{6,12}$/;varflag=reg.test(username);判断手机号,1开头并且11位数字varreg=/^[1]\d{10}$/;varflag=reg.test(tele); functionteleflag(){vartele=teleInput.value.trim();//varflag=tele.length==11......
  • java项目实战-mybatis-基本用法02接口绑定实现类-day23
    目录1.复习什么是接口什么是类?2.mybatis接口绑定实现类来实现查询3.参数的传递4插入数据1.复习什么是接口什么是类?publicinterfaceSpeak{voidsay();}Speak这个接口里面定义了say方法所有实现了Speak的类都必须实现say方法publicclassChineseimpl......