Collection接口,List的实现类ArrayList

Collection集合概述

1.集合作为容器用来存储,管理大量的对象(引用),这些集合内部用了不同的数据结构来存储元素,这些数据结构的不同导致了每种集合的增删改查效率不同。
2.内部存储的只能是“对象引用”,子类使用多态存储基本数据类型时,泛型需要使用他们对应的包装类。

在这里插入图片描述

Collection接口的常用方法

由于Collection是一个接口,所以该类中全部都是抽象方法,调用时会使用多态(父类型引用指向子类型对象)。主要了解这些方法的作用。

增:

public boolean add(E e);//把给定的对象添加到集合中

删:

  1. public void clear();//清空集合中所有元素。
  2. public boolean remove(E e);//把给定的对象在集合中删除

改:【无】

查:

  1. public boolean contains(Object obj);//判断当前集合是否包含给定元素
  2. public boolean isEmpty();//判断集合是否为空
  3. public int size();//返回当前集合元素的个数。
  4. public Object[] toArray();//把集合中的元素储存在数组中。
  5. public Iterator iterator();//获取一个迭代器,用于遍历集合元素

List继承了Collection接口的方法

  1. 增:public void add(int index, E element) : 将指定的元素,添加到该集合中的指定位置上。
  2. 删:public E remove(int index) : 移除列表中指定位置的元素, 返回的是被移除的元素。
  3. 改:public E set(int index, E element) :用指定元素替换集合中指定位置的元素,返回值的更新前的元素。
  4. 查:public E get(int index) :返回集合中指定位置的元素。
    共同特点是都带了“索引”的参数!

List接口的实现类:

ArrayList

  1. 底层是数组。
  2. 扩容机制:扩容后是原容量的1.5倍,初始容量为10.
  3. 没有新增方法。使用的都是List和Collection中的定义的方法
  4. 作用跟“数组”一样,作为“容器”,存储、管理大量的“对象(引用)”。
  5. 查询效率高,增删效率低

ArrayList 无参的构造方法,创建了一个长度为0的数组
在这里插入图片描述
也有有参的构造方法,指定了初始大小

本质上就是创建了一个参数大小的数组
在这里插入图片描述
源码

// An highlighted block
public ArrayList(int initialCapacity) {//创建时可传参
        if (initialCapacity > 0) {//如果传的参数容器大于0
            this.elementData = new Object[initialCapacity];//创建一个大小为initialCapacity的数组
        } else if (initialCapacity == 0) {
            this.elementData = EMPTY_ELEMENTDATA;//如果传入的参数为0.那就默认时空数组
        } else {
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        }
    }

1.添加元素(add())

添加过程:

先将底层数组扩容
将元素赋值到数组对应位置
返回true

list.add(10;//这里的10是基础数据类型的对象类型:Integer类型
list.add("abc";//添加元素的位置跟add次序有关,第一个add在数组的第一个位置

源码

 public boolean add(E e) {
       ensureCapacityInternal(size+1);
        elementData[size++]=e;//把这个元素赋值给了元素相应的位置
        return true;//添加成功返回true。如果不成功在上一行代码中就会报错。
    }

add还可以给指定位置添加元素

//为指定位置添加元素   第一个参数:指定位置,第二个参数:元素值
add(index,data);//给index位置添加data数据,其他数据会往后挤

注意:

只能向前面有数据的位置插入,不能中间空了好多位置向后插入,比如容量大小为10,目前只有两个元素,则只能往0,1,2的位置插入,不能向3,4,5…等位置隔着插入
ArrayList对象不能存储基本类型,只能存储引用类型的数据。类似 不能写,但是存储基本数据类型对应的包装类型是可以的。所以,想要存储基本类型数据, <> 中的数据类型,必须转换后才能编写。

2.获取元素(get())

list.get();

源码

//get 
public E get(int index) {
        rangeCheck(index);
        return elementData(index);//如果上句不抛异常,则执行到这句,返回相应的元素
    }

//rangeCheck()
private void rangeCheck(int index) {
        if (index >= size)  //如果脚标大于size则抛异常
            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
    }
//elementData()
E elementData(int index) {
        return (E) elementData[index];//返回数组相应脚标位置的元素
    }

3.修改元素(set())

list.set(0,"first");//注意他修改后会返回原来的数据 

4.删除元素(remove())

list.remove(int index);//按下标删除,返回值是删之前的元素
list.remove(Object o);//按内容删,返回一个布尔值,删成功或删失败
//删除一个元素后,后面的元素统一前移

注意:如果元素为整数,remove的参数为int,按照下标删除;参数为Integer,按照元素删除

list.remove(3);//按脚标删
list.remove(new Integer(3));//按元素删,注意存入的基础数据类型元素默认是它的对象类型的

如果容器中有多个3,remove一次,删除的是第一个3

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值