0
点赞
收藏
分享

微信扫一扫

Java 集合—ArrayList

北邮郭大宝 2023-11-12 阅读 50

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集合 - ArrayList

Java集合ArrayList类

Java 集合- ArrayList 源码

Java集合之ArrayList详解

ArrayList集合

0 条评论