ArrayList的常用方法

发布时间 2023-12-02 09:32:18作者: べ微熏の斜陽べ

简介

ArrayList 是 java 集合框架中比较常用的数据结构了。继承自 AbstractList,实现了 List 接口。底层基于数组实现容量大小动态变化。允许 null 的存在。同时还实现了 RandomAccess、Cloneable、Serializable 接口,所以ArrayList 是支持快速访问、复制、序列化的。

ArrayList

  1. ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问
  2. ArrayList实现了Cloneable接口,表明ArrayList可以clone的
  3. ArrayList实现了Serializable接口,表明ArrayList支持序列化的
  4. Vector不同,ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择Vector或者CopyOnWriteArrayList
  5. ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表。

缺点:

1、插入和删除的效率比较低。

2、根据内容查找元素的效率较低。

ArrayList使用

构造

ArrayList有三种构造方式:无参构造、利用其他的collection构造、指定顺序表的初始容量。

1.1 无参构造

无参构造类型是推荐的写法。

//Integer为整型的包装类型
List<Integer> list = new ArrayList<>();
12

1.2 指定初始容量

 List<Integer> list = new ArrayList<>(10);
 list.add(1);
 list.add(2);
 list.add(3);
1234

1.3 利用其他的collection进行构造

//构建一个与list1元素一样的list
 ArrayList<Integer> list2 = new ArrayList<>(list1);
12

注: 无论哪种构造形式,都应该避免省略类型,任意类型的元素都能够存放,使用时会带来很多麻烦。

基础操作

2.1 添加元素

添加元素到 ArrayList 可以使用 add() 方法:

public class Test{
    public static void main(String[] args) {
        ArrayList<String> array = new ArrayList<String>();
        sites.add("Hello");
        sites.add("CSDN");
        System.out.println(array);
    }
}

2.2删除元素

删除元素使用remove()方法:

public class Test {
    public static void main(String[] args) {
        ArrayList<String> array = new ArrayList<>();
        array.add("Hello");
        array.add("CSDN");
        array.add("IDEA");
        array.add("Java");
        System.out.println(array);
        array.remove(2);
        System.out.println(array);
    }
}

2.3 修改元素

修改元素可以使用 set() 方法:

public class Test {
    public static void main(String[] args) {
        ArrayList<String> array = new ArrayList<>();
        array.add("Hello");
        array.add("CSDN");
        array.add("IDEA");
        array.add("Java");
        System.out.println(array);
        array.set(2,"python"); // 第一个参数为索引,第二个参数为要修改的值
        System.out.println(array);
    }
}

2.4 访问元素

访问元素使用get()方法:

public class Test {
    public static void main(String[] args) {
        ArrayList<String> array = new ArrayList<>();
        array.add("Hello");
        array.add("CSDN");
        array.add("IDEA");
        array.add("Java");
        System.out.println(array);
        System.out.println(array.get(2)); // 获取位置2的元素

    }
}

2.5 计算大小

计算数组内元素个数使用size()方法:

public class Test {
    public static void main(String[] args) {
        ArrayList<String> array = new ArrayList<>();
        array.add("Hello");
        array.add("CSDN");
        array.add("IDEA");
        array.add("Java");
        System.out.println(array);
        System.out.println(array.size());
    }
}

2.6 遍历数组

遍历数组有三种方式:for循环遍历、for-each遍历、迭代器遍历。

public class Test {
    public static void main(String[] args) {
        ArrayList<String> array = new ArrayList<>();
        array.add("Hello");
        array.add("CSDN");
        array.add("IDEA");
        array.add("Java");
        System.out.println(array);
        //for循环遍历
        System.out.println("for:");
        for (int i = 0; i < array.size(); i++) {
            System.out.print(array.get(i)+" ");
        }
        System.out.println();
		//for-each遍历
        System.out.println("for-each:");
        for (String j:array) {
            System.out.print(j+" ");
        }
        System.out.println();
		//迭代器遍历
        System.out.println("迭代器:");
        Iterator<String> it = array.listIterator();
        while(it.hasNext()){
            System.out.print(it.next() + " ");
        }
        System.out.println();
    }

常用操作

方法 作用
void add(int index, E element) 将element元素插入到index位置
boolean addAll(Collection<? extends E> c) 将c中的元素全部插入
boolean remove(Object o) 删除第一个遇到的o元素
void clear() 清空
boolean contains(Object o) 判断o是否在表中
int indexOf(Object o) 返回第一个o所在的下标
int lastIndexOf(Object o) 返回最后一个o的下标
List<E> subList(int fromIndex, int toIndex) 截取fromindex到toindex的元素
public class Test {
    public static void main(String[] args) {
        ArrayList<String> array = new ArrayList<>();
        ArrayList<String> array2 = new ArrayList<>();
        //add插入元素
        array.add("Hello");
        array.add("CSDN");
        array.add("Java");
        array.add("IDEA");

        array2.add("python");
        array2.add("Java");

        array.add(1,"Data");
        System.out.println("array = " + array);
        //addAll添加另一个ArrayList集合
        array2.addAll(array);
        System.out.println("array2 = " + array2);
		//remove删除ArrayList中的指定元素
        array2.remove("Data");
        System.out.println("array2 = " + array2);
		//清空ArrayList的所有元素
        array.clear();
        System.out.println("array = " + array);
		//contains判断指定的元素是否存在与集合中
        System.out.println("Java是否在表中:" + array2.contains("Java"));
		//indexOf查询第一个元素的搜引(下标)
        System.out.println("array2.indexOf(\"Java\") = " + array2.indexOf("Java"));
		//lastIndexOf查询最后一个出现的元素搜引
        System.out.println("array2.lastIndexOf(\"Java\") = " + array2.lastIndexOf("Java"));
		//subList截取开始搜引到结束搜引的所有元素
        System.out.println("array2.subList(1,4) = " + array2.subList(1,4));
    }