栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

ArrayList集合

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ArrayList集合

ArrayList
  • 1.Collection接口
    • 1.1 接口方法
  • 2.ArrayList
    • 2.1 特点
    • 2.2 方法使用
    • 2.3 继承关系
    • 2.4 构造函数
    • 2.6 属性信息
    • 2.7 默认值或默认属性
    • 2.8 扩容机制
    • 2.9 add(T v)
  • 3.问题:ArrayList和数组区别?

1.Collection接口

JDK 版本:1.7

1.1 接口方法


2.ArrayList 2.1 特点

1.数据是插入有序的
2、数据是可以重复的
3、可以存储null
4、底层数据结构是数组
5、可以动态扩容的,默认容量是10
6、扩容是按照原大小的1.5倍进行扩容

2.2 方法使用
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ArrayListDemo {
    public static void main(String[] args){
        //创建ArrayList实例研究Collection方法
        ArrayList arrayList = new ArrayList();
        ArrayList arrayList1 = new ArrayList();
        arrayList1.add(1);
        arrayList1.add(2);
        arrayList1.add(3);
        arrayList1.add(1);

        //添加单个元素 boolean add(E e)
        arrayList.add(2);
        System.out.println("元素个数:"+arrayList.size());

        //批量添加元素 boolean addAll(Collection c)
        arrayList.addAll(arrayList1);
        System.out.println("元素:"+arrayList);

        arrayList1.add(5);

        //获取集合中元素个数 int size()
        arrayList.size();

        //获取元素 通过指定下标获取元素 E get(int index)
        arrayList.get(0);
        System.out.println("0号位置元素:"+arrayList.get(0));

        //删除集合中所有元素 void clear()
        //arrayList.clear();
        //System.out.println("全部删除后:"+arrayList);

        //查询集合中是否包含指定的元素 boolean contains(Object o) true:包含
        boolean b = arrayList.contains(6);

        //查询集合中是否存在指定的子集和对象
        boolean b1 = arrayList1.containsAll(arrayList);
        System.out.println(b1);

        //判断当前集合是否为空 boolean isEmpty() true:为空
        arrayList.isEmpty();

        //删除指定元素(找到第一个符合的元素删除)
        arrayList.remove(Integer.valueOf(1));

        //保留当前集合及参数集合相同的部分,删除当前集合的其他元素 boolean retainAll(Collection c)
        boolean b2 = arrayList.retainAll(arrayList1);

        //遍历集合获取迭代器实例 Iterator iterator()
        Iterator iterator =arrayList1.iterator();
        while(iterator.hasNext()){
            System.out.print(iterator.next()+" ");
        }

        //List接口是Collection子接口,继承其所有方法,list也有自己特有方法

        System.out.println();
        //查询指定元素在集合中的位置 int indexOf(Object o)
        int i = arrayList1.indexOf(3);
        System.out.println(i);

        //修改指定位置的元素 E set(int index,E element)
        arrayList1.set(2,666);

        System.out.println();
        //获取集合的子集(前闭后开特点) List subList(int fromIndex,int toIndex)
        List list = arrayList1.subList(1,4);

    }


}

2.3 继承关系

ArrayList继承自AbstractList,AbstractList类是抽象类实现自List接口,对接口中通用的方法做了实现,子类可以不用实现,子类如果有特殊需求可以重写对应方法
ArrayList实现接口List、RandomAccess、Cloneable、Serializable
List接口是ArrayList、linkedlist的接口,定义了集合中大部分方法
RandomAccess接口表明当前类可以随机访问
Cloneable接口表明当前类是可以被克隆
Serializable接口表明当前类是可以支持序列化和反序列化

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

2.4 构造函数
//通过初始容量参数来实例化ArrayList
public ArrayList(int initialCapacity) {
        super();
        //参数校验
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+initialCapacity);
        //创建指定大小的数组实例
        this.elementData = new Object[initialCapacity];
    }

//无参构造函数
    public ArrayList() {
        super();
        //给定空的数组
        this.elementData = EMPTY_ELEMENTDATA;
    }


   //通过集合实例来实例化ArrayList
    public ArrayList(Collection c) {
        elementData = c.toArray();
        size = elementData.length;
        // c.toArray might (incorrectly) not return Object[] (see 6260652)
        if (elementData.getClass() != Object[].class)
            //完成数据拷贝
            elementData = Arrays.copyOf(elementData, size, Object[].class);
    }
2.6 属性信息

通过elementData属性了解:ArrayList底层数据存储在数组中

//存储元素位置
private transient Object[] elementData;
//存储元素个数
private int size;
//父类提供的属性 记录集合数据变更版本值(新增、修改、删除) ,和业务无关
private int modcount  修改版本号

2.7 默认值或默认属性
//默认的数组初始容量
private static final int DEFAULT_CAPACITY = 10;
//空数组实例
private static final Object[] EMPTY_ELEMENTDATA = {};
2.8 扩容机制
//扩容大小  
int newCapacity = oldCapacity + (oldCapacity >> 1);

arraylist集合扩容时按照1.5倍进行扩容
2.9 add(T v)

public void add(int index, E element) 添加数据;在指定位置添加数据,需要保证index合法,并将index之后的数据后移以为,然后插入新值
add过程:
1、如果存储数组为空,获取默认的大小值是10
2、如果需要大小超过数组大小、考虑扩容,按照原数组大小的1.5倍扩容
3、通过创建新数组,将元素组大小拷贝到新数组中
4、将新增元素插入最后的size位置并对size进行加1操作

3.问题:ArrayList和数组区别?
  • ArrayList底层封装数组,提供了丰富API操作
  • 存储数据:ArrayList存储的是自定义对象,基本包装类型 数组可以存放自定义类型,包装类型、基类类型(int)
  • ArrayList是可以自动扩容的 ,数组不能自动扩容

今天也要好好学习呀~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/288250.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号