【Java底层】-List集合

本文深入探讨Java集合框架中的List接口,重点关注ArrayList类的实现原理和特性,包括其线程不安全、动态扩容、高效增删等。文章详细介绍了ArrayList的构造器、添加元素逻辑、扩容策略以及与LinkedList的比较,帮助开发者选择合适的集合类型。
摘要由CSDN通过智能技术生成

1. Collection

Iterable 接口与 Map 接口在 Java 体系中占主要地位,基本上所有的数据结构都是基于这个两个接口,一个是线性可迭代的一个是哈希表。

Collection 接口作为集合体系的父接口,Map 作为哈希表体系的接口。

最主要的集合 Collection 源码提供方法:


public interface Collection<E> extends Iterable<E> {
   
    int size();  // 集合大小
    boolean isEmpty(); // 是否为空
    boolean contains(Object o); // 是否包含某个元素
    Iterator<E> iterator(); // 返回迭代器
    Object[] toArray(); // 返回 Object 数组
    <T> T[] toArray(T[] a); // 返回指定泛型的数组
    boolean add(E e); // 添加一个元素,返回是否添加成功
    boolean remove(Object o); // 移除一个元素,返回是否添加成功
    boolean containsAll(Collection<?> c); // 是否包含另一个集合
    boolean addAll(Collection<? extends E> c); // 将另一个集合添加到当前集合
    boolean removeAll(Collection<?> c); // 移除当前集合的元素,返回集合是否被修改过
    default boolean removeIf(Predicate<? super E> filter); // 根据添加移除元素
    boolean retainAll(Collection<?> c); // 仅保留存在于给定集合的元素,返回集合是否被修改过
    void clear(); // 清空集合
    boolean equals(Object o);  // 判断是否相等
    int hashCode();	 // 返回hash值
}
2. List
  1. 存储的数据特点:存储有序的、可重复的数据。
  2. 常用的实现类:
  • Collection接口:单列集合,用来存储一个一个的对象
  • List接口:存储序的、可重复的数据。 -->“动态”数组,替换原的数组
  • ArrayList:作为List接口的主要实现类;线程不安全的,效率高;底层使用Object[] elementData存储,随着元素的增加而动态扩容
  • LinkedList:对于频繁的插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储,随着元素的增加而不断向链表的后端增加结点
2.1 List接口
#List方法
A:添加功能
  boolean add(E e):向集合的尾部添加一个元素
* void add(int index, E element):在指定位置添加元素
  boolean addAll(Collection<? extends E> c):在集合中尾部添加一个集合。
* boolean addAll(int index, Collection<? extends E> c);// 在集合指定位置添加一个集合。

B:删除功能
  void clear():删除集合中的所有元素
* E remove(int index):删除集合指定位置的元素,并把删除的元素返回
  boolean remove(Object o):删除集合中指定的元素
  boolean removeAll(Collection<?> c):删除两个集合的交集 。
* default void replaceAll(UnaryOperator<E> operator) // 将集合中的元素特换成指定元素

C:修改功能
  void clear(); // 清空集合元素
  E set(int index
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值