ArrayList

java ArrayList

ArrayList类是一个可以动态修改的数组,与普通数组的区别是他是没有固定大小的限制,我们可以添加或者删除元素。

它其实是一个集合。

ArrayList继承了AbstractList,并实现了List接口。

ArrayList底层是数组,LinkList底层是链表。(自行百度……后续也会更新文章)

image-20210826132336417

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

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

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

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

简单分析源码

ArrayList 是集合还是数组??

有人说是集合 应为它实现了 list 集合 有人说是数组 应为它底层是数组

分析:集合和数组的本质区别

  • 数组:大小固定,只能存储相同的数据类型的数据
  • 集合:大小可动态扩展,可以存储各种类型的数据

ArrayList 可以存储多种不同的数据 而且它的长度可以动态拓展,所以它是一个集合

源码分析

  1. ArrayList 是一种可变长的集合类,基于定长数组实现,使用默认构造方法初始化出来的容量是10(1.7之后都是延迟初始化,即第一次调用add方法添加元素的时候才将elementData容量初始化为10。)。
  2. ArrayList 允许空值和重复元素,当往ArrayList 中添加的元素数量大于其底层数组容量的时候,就会通过扩容的机制重新生成一个更大的数组。ArrayList扩容的长度是原长度的1.5倍
  3. 由于 ArrayList 底层基于数组实现,所以其可以保证在O(1)复杂度下完成随机查找操作。
  4. ArrayList 是非线程安全类,并发环境下,多线程同时操作 ArrayList ,会引发不可预知的异常或者错误。
  5. 顺序添加很方便
  6. 删除和插入需要复制数组,性能差((对底层数组删除插入性能肯定差咯)可以使用LinkedList)

添加元素

ArrayList类提供了很多有用的方法,添加元素到ArrayList可以使用add()方法:

实例:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        System.out.println(sites);
    }
}

以上实例,执行输出结果:

[Google, Runoob, Taobao, Weibo]

访问元素

访问ArratList中的元素可以使用get()方法:

实例:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        System.out.println(sites.get(1));  // 访问第二个元素
    }
}

注意:数组的索引值从0开始。

以上实例运行结果为:

Runoob

修改元素

如果要修改ArrayList中的元素可以使用set()方法:

实例:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        sites.set(2, "Wiki"); // 第一个参数为索引位置,第二个为要修改的值
        System.out.println(sites);
    }
}

以上实例,执行输出结果:

[Google, Runoob, Wiki, Weibo]

删除元素

如果要删除ArrayList中的元素可以使用remove()方法:

实例:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        sites.remove(3); // 删除第四个元素
        System.out.println(sites);
    }
}

以上实例,执行输出结果为:

[Google, Runoob, Taobao]

计算大小

如果要计算ArrayList中的元素数量可以使用size()方法:

实例:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        System.out.println(sites.size());
    }
}

以上实例结果:

4

迭代数组列表

我们以可使用for来迭代数组列表中的元素:

实例:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        for (int i = 0; i < sites.size(); i++) {
            System.out.println(sites.get(i));
        }
    }
}

以上输出结果:

Google
Runoob
Taobao
Weibo

也可以使用for-each来迭代元素:

实例:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        for (String i : sites) {
            System.out.println(i);
        }
    }
}

以上输出结果:

Google
Runoob
Taobao
Weibo

ArrayList排序

Collections 类也是一个非常有用的类,位于 java.util 包中,提供的 sort() 方法可以对字符或数字列表进行排序。

以下实例对字母进行排序:

实例:

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

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Taobao");
        sites.add("Wiki");
        sites.add("Runoob");
        sites.add("Weibo");
        sites.add("Google");
        Collections.sort(sites);  // 字母排序
        for (String i : sites) {
            System.out.println(i);
        }
    }
}

以上实例输出结果:

Google
Runoob
Taobao
Weibo
Wiki

以下实例对数字进行排序:

实例:

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

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<Integer> myNumbers = new ArrayList<Integer>();
        myNumbers.add(33);
        myNumbers.add(15);
        myNumbers.add(20);
        myNumbers.add(34);
        myNumbers.add(8);
        myNumbers.add(12);

        Collections.sort(myNumbers);  // 数字排序

        for (int i : myNumbers) {
            System.out.println(i);
        }
    }
}

以上实例运行结果:

8
12
15
20
33
34

Java ArrayList方法

Java ArrayList常用方法列表如下:

方法 描述
add() 将元素插入到指定位置的 arraylist 中
addAll() 添加集合中的所有元素到 arraylist 中
clear() 删除 arraylist 中的所有元素
clone() 复制一份 arraylist
contains() 判断元素是否在 arraylist
get() 通过索引值获取 arraylist中的元素
indexOf() 返回 arraylist 中元素的索引值
removeAll() 删除存在与指定集合中的 arraylist 里的所有元素
remove() 删除 arraylist 里的单个元素
size() 返回 arraylist 里的元素数量
isEmpty() 判断 arraylist 是否为空
subList() 截取部分 arraylist 的元素
set() 替换 arraylist 中指定索引的元素
sort() 对 arraylist 元素进行排序
toArray() 将 arraylist 转换为数组
toString() 将 arraylist 转换为字符串
ensureCapacity() 设置指定容量大小的 arraylist
lastlndexOf() 返回指定元素在 arraylist 中最后一次出现的位置
retainAll() 保留 arraylist 中在指定集合中也存在的那些元素
containsAll() 查看 arraylist 是否包含指定集合中的所有元素
trimToSize() 将 arraylist 中的容量调整为数组中的元素个数
removeRange() 删除 arraylist 中指定索引直接按存在的元素
replaceAll() 将给定的操作内容替换掉数组中每一个元素
removeIf() 删除所有满足特定条件的 arraylist 元素
forEach() 遍历 arraylist 中每个元素并执行特定操作

详情:https://www.runoob.com/java/java-arraylist.html

posted @ 2021-08-26 14:50  小鲤鱼丿[小白]  阅读(91)  评论(0)    收藏  举报