java集合-ArrayList全解

java集合——ArrayList

简介

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

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

ArrayList结构图

成员变量

ArrayList底层是基于数组来实现。该数组的容量大小是动态变化的
主要成员变量

	/**
     * 默认的初始化大小10
     */
    private static final int DEFAULT_CAPACITY = 10;
    /**
     * 实际存放对象的数组
     */
    transient Object[] elementData; // non-private to simplify nested class access

    /**
     *实际的数组大小(数组中实际元素的个数)
     */
    private int size;

构造方法

无参构造方法

public ArrayList() {… }

无参构造方法,elementData生成一个空数组,会在第一次新增元素时,初始化成10大小的数组

   //无参构造方法  DEFAULTCAPACITY_EMPTY_ELEMENTDATA是一个
    public ArrayList() {
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }
有参构造

public ArrayList(int initialCapacity) {…}

把elementData 生成你传过来参数(initialCapacity)大小的数组

   //有参构造方法(参数:数组的大小)
   public ArrayList(int initialCapacity) {
       if (initialCapacity > 0) {
           this.elementData = new Object[initialCapacity];
       } else if (initialCapacity == 0) {
           this.elementData = EMPTY_ELEMENTDATA;//EMPTY_ELEMENTDATA空数组
       } else {
           throw new IllegalArgumentException("Illegal Capacity: "+
                                              initialCapacity);
       }
   }

public ArrayList(Collection<? extends E> c) {…}

把传进来的集合复制到该数组中


    /**
     * 构造一个包含指定元素的列表集合的ArrayList
     */
    public ArrayList(Collection<? extends E> c) {
        elementData = c.toArray();
        if ((size = elementData.length) != 0) {
            // 为了保持对象的不变(如原集合对象时Integer,生成的新集合对象也是Integer)
            if (elementData.getClass() != Object[].class)
                elementData = Arrays.copyOf(elementData, size, Object[].class);
        } else {
            this.elementData = EMPTY_ELEMENTDATA;
        }
    }

常用方法

方法名称解释
boolean add(E e)新增对象
void add(int index,E e)把元素插入到指定位置(注意:不是替换)
E get(int index)得到指定位置元素
E remove(int index)删除指定位置元素
boolean remove(Object o)删除指定元素(注意:只删除在数组中位置靠前的一个相等元素)
int size()返回 arraylist 里元素数量
boolean isEmpty()判断 arraylist 是否为空
void sort(Comparator<? super E> c)对 arraylist 元素进行排序
package com.java.demo;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class UseArrayList {

    public static void main(String[] args){
        List<Integer> myArrayList = new ArrayList<Integer>();

        myArrayList.add(1);
        myArrayList.add(2);
        myArrayList.add(3);
        myArrayList.add(3);
        myArrayList.add(2);
        myArrayList.add(1);
        System.out.println(myArrayList.toString());//[1, 2, 3, 3, 2, 1]

        myArrayList.add(2,4);
        System.out.println(myArrayList.toString());//[1, 2, 4, 3, 3, 2, 1]

        System.out.println(myArrayList.get(2));//4

        myArrayList.remove(1);
        System.out.println(myArrayList.toString());//[1, 4, 3, 3, 2, 1]

        myArrayList.remove(new Integer(3));
        System.out.println(myArrayList.toString());//[1, 4, 3, 2, 1]

        System.out.println(myArrayList.size());//5

        System.out.println(myArrayList.isEmpty());//false

        myArrayList.sort(new Comparator<Integer>() {
        /*根据java源代码,可以知道内部规定:
        *compare方法大于0,就把前一个数和后一个数交换,如果小于等于0就保持原位置,不进行交换。
        */
            @Override
            public int compare(Integer o1, Integer o2) {
                return (o1.intValue() < o2.intValue())?-1:0;
            }
        });
        System.out.println(myArrayList.toString());//[1, 1, 2, 3, 4]
    }
}

建议直接看JAVA源码ArrayList

站在巨人的肩上:
java ArrayList|菜鸟教程
ArrayList详解,看这篇就够了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值