List与ArrayList

1.什么是List

在集合框架中,list是一个接口,继承自collection

collection也是一个接口,该接口中规范了后序容器中常用的一些方法,具体如下所示:

lterable也是一个接口,表示实现该接口的类是可以逐个元素进行遍历。

在数据结构的角度来看,list就是一个线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删改查以及变量等操作。

2.list的使用

注意:List是个接口,并不能直接进行实例化。如果要使用,必须去实例化List的实现类。在集合框架中,ArrayList和LinkedList都实现了List接口。

3.ArrayList与顺序表

3.1线性表

常见的线性表:顺序表、链表、栈、队列......

线性表只是逻辑上的线型结构,但是在物理结构上并不一定是连续的,在存储时通常以数组和链式结构的形式存储。

顺序表:

链表:

3.2 ArrayList简介

ArrayList是以泛型方式实现的,使用时需要实例化;同时ArrayList 实现了RandomAccess 接口、Cloneable接口、Serializable接口 表明ArrayList支持随机访问,可以clone,支持序列化。但是,

ArrayList 在单线程下可以使用,在多线程中可以选择Vector,同时ArrayList可以动态扩容。

3.2.1 ArrayList常见操作

3.2.2 ArrayList遍历

3.2.3 ArrayList扩容

ArrayList是一个动态类型的顺序表,即在插入元素时会自动扩容,同时内部扩容分为几部:

1.检测是否真正需要扩容,如果调用grow准备扩容

2.预估需要扩容的大小

  • 初步预定按照1.5倍大小扩容
  • 如果需求超过1.5倍大小,则按照用户所需大小进行扩容
  • 真正扩容之前检测是否能扩容成功,防止太大扩容失败

3.使用copyOf进行扩容

4.ArrayList的具体使用

4.1杨辉三角

复制代码
class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List <Integer>> arrayList=new ArrayList<>();
        List<Integer> one=new ArrayList<>();
        one.add(1);
        arrayList.add(one);
        for(int i=1;i<numRows;i++){
            List<Integer>cur=new ArrayList<>();
            cur.add(1);
            List<Integer>pre=arrayList.get(i-1);
            for(int j=1;j<i;j++){
                int ret=pre.get(j-1)+pre.get(j);
                cur.add(ret);
            }
            cur.add(1);
            arrayList.add(cur);
        }
        return arrayList;
    }
}

4.2简单洗牌算法

相关推荐
CS创新实验室24 分钟前
从顺序表到动态数组:数据结构的永恒基石与现代语言的优雅封装
数据结构·算法
8Qi82 小时前
LeetCode 23. 合并 K 个升序链表 —— 小顶堆(PriorityQueue)
数据结构·算法·leetcode·链表·
QiLinkOS2 小时前
《打破“用爱发电”:一种基于 Gitee 与时间戳的开源权益分配机制探索》
c语言·数据结构·c++·科技·算法·gitee·开源
Boom_Shu4 小时前
长方形的关系
数据结构·c++·算法
Lsk_Smion5 小时前
力扣实训 _ [543].二叉树的直径 _ [23].合并K个升序列表
数据结构·算法·leetcode
ID_180079054738 小时前
淘宝商品详情数据接口深度解析:架构、鉴权、数据结构与实战
数据结构·架构
散峰而望8 小时前
【算法练习】算法练习精选:陶陶摘苹果(基础+升级)、Music Notes、字串变换,你能AC几道?
数据结构·c++·算法·leetcode·贪心算法·github·动态规划
凤凰院凶涛QAQ9 小时前
《Java版数据结构 & 集合类剖析》集合框架的封装设计与顺序表:“从 Iterable 到 ArrayList:集合框架的‘职业树“
java·开发语言·数据结构
8Qi89 小时前
LeetCode 148. 排序链表 —— 解法一:自顶向下递归(分治 + 归并)
数据结构·算法·leetcode·链表·递归·分治·归并
8Qi89 小时前
LeetCode 148. 排序链表 —— 解法二:自底向上归并(迭代,O(1) 空间)
数据结构·算法·leetcode·链表·归并·迭代