list接口和实现类

简介: list

List 特性: 这里针对的是 Set 相比较

1.    有序的
2.    不唯一的,可重复的;
3    有索引的;

List 规定了 独有的规则(方法):

增加元素的方法:
    void  add(int  index, E  element) 在列表的指定位置插入指定元素(可选操作);

    boolean addAll ( int index , Collection c) 将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作);


获取元素的方法:
    Object  get(int index) 返回列表中指定位置的元素;

    List<E> subList(int fromIndex, int toIndex) 返回列表中指定的 fromIndex(包括) 和toIndex(不包括)之间的部分视图;
    从 fromIndex 开始,到 toIndex 结束,但不包括 toIndex 处的元素;注意索引,不要超出了size;


查询元素的方法:
    int indexOf(Object o) 返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1 ;

    int lastIndexOf(Object o) 返回此列表中最后出现的指定元素的索引;如果列表不包含次元素,则返回 -1 ;


删除元素的方法:
    E remove(int index) 移除列表中指定位置的元素(可选操作);注意索引,不要超出size;


改变元素的方法:
    E set(int index, E element) 用指定元素替换列表中指定位置的元素(可选操作);

List 遍历方式:

1.    for 循环        list独有; 速度慢,但是可以更改每一个值;
2.    foreach  速度快,调用 iterator,但是不能改变数值;
3.    iterator    速度最快,可以有一些修改数值的操作;
推荐2,3    Collection 家族通用的遍历方式;

ArrayList 实现类
ArrayList 学习:

底层:
    可变数组,数组可以扩容,减容;
    transient Object[] elementData;
        所有的构造器都在给 elementData 赋值;
        elementData 就是 底层的数组;
    
扩容: 每次的新容量都是之前的 1.5 倍;
        但不是所有类型都是扩容 1.5 倍;
            int newCapacity = oldCapacity + (oldCapacity >> 1);

特性:
    可以为null;
    线程不安全;

ArrayList 特殊方法:

void ensureCapacity(int minCapacity) 如有必要,增加此 ArrayList 实例的内容,以确保它至少能够容纳最小容量参数所指定的元素数;

protected void removeRange(int fromIndex, int toIndex) 移除列表中索引在 fromIndex(包括) 和 toIndex (不包括) 之间的所有元素;

void trimToSize() 将此 ArrayList 实例的容量调整为列表的当前大小;

总结:

ArrayList 都是在操作数组;
数组是内存中一块连续的空间; 

ArrayList 查询速度快;

ArrayList 增删元素慢;
每次 增加 或 删除 元素,都需要改变整个数组;  牵一发而动全身;

LinkedList 学习

链表结构:
    单向链表;
    双向链表;
    循环链表;

LinkedList 底层使用链表,双向循环链表;
1.7之后 去掉了 head 成为 双向链表,底层变化很大

特性:

    查询速度慢;
    增删速度快;

总结:

    前提 如果需要使用 List 的实现类;
    当查询用的多时,使用 ArrayList;
    当增删用的多时,使用 LinkedList;
    ??并且 LinkedList 没有自己特殊的方法   linkedlist 自己独特的方法 多得很


Vector 类 学习:

底层基于数组,基本操作都是在操作底层的数组;

和 ArrayList 的底层基本原理相同; 但是同步,也就是 带 synchronized 锁,安全性高!

特性:

相对 ArrayList 而言
    效率低;
    线程安全;

相对 LinkedList 而言
    查询快;
    增删慢;
相关文章
|
5月前
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
5月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
5月前
|
编译器
【Bug记录】list模拟实现const迭代器类
【Bug记录】list模拟实现const迭代器类
List集合的实现类
List集合的实现类
|
7月前
|
存储 Java 测试技术
滚雪球学Java(57):解密Java中List接口底层实现原理
【6月更文挑战第11天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
57 2
|
6月前
|
文字识别 Java
文本,文字识别07,SpringBoot服务开发-入参和返回值,编写接口的时候,要注意识别的文字返回的是多行,因此必须是List集合,Bean层,及实体类的搭建
文本,文字识别07,SpringBoot服务开发-入参和返回值,编写接口的时候,要注意识别的文字返回的是多行,因此必须是List集合,Bean层,及实体类的搭建
|
6月前
|
前端开发
若依修改,配置了一个接口路径出现了,如何放通接口{ “msg“: “请求访问:/code/list,认证失败,无法访问系统资源“, “code“: 401}
若依修改,配置了一个接口路径出现了,如何放通接口{ “msg“: “请求访问:/code/list,认证失败,无法访问系统资源“, “code“: 401}
|
8月前
|
存储 安全 Java
Java的List、Set、Queue等接口及其实现类的技术性文章
Java的List、Set、Queue等接口及其实现类的技术性文章
47 1
|
8月前
|
存储 安全 Java
Java list set map等接口及其实现类
Java list set map等接口及其实现类
|
8月前
|
存储 算法 C语言
从C语言到C++_16(list的介绍和常用接口函数)
从C语言到C++_16(list的介绍和常用接口函数)
81 0