Java集合03:List接口

本文详细介绍了Java中List接口的特点及其常用方法,包括有序和可重复的特性。接着讲解了ArrayList的实现原理,强调其非线程安全但适合检索操作的特性,以及如何通过Collections工具类使其变为线程安全。LinkedList作为List的另一种实现,以其高效的随机增删效率和双链表结构为特点。最后提到了线程安全但效率较低的Vector集合。
摘要由CSDN通过智能技术生成

关于java.util.List接口(单个方式存储元素)


一、List集合接口中的常用方法
  • List集合存储元素的特点:有序可重复
    ——有序:存进去的顺序和取出来的顺序相同,集合中的元素有下标,从0开始以1递增
    ——可重复:存储进去一个1,可以再存进去一个1
  • List集合继承了Collection接口,继承了Collection集合中的方法时,也具有自己“特有”的方法:
    ——以下只列出List接口特有的常用的方法:
    1. voidadd(int index, E element): 在集合的指定下标位置插入指定元素。
    2. Eget(int index):获得集合中指定下标位置的元素。
    3. Eset(int index, E element):把集合中指定下标位置的元素替换为指定元素。
    4. intindexOf(Object o):返回此集合中第一次出现指定元素的索引;如果集合中不包含该元素,则返回 -1。
    5. intlastIndexOf(Object o):返回此集合中最后出现指定元素的索引;如果集合中不包含此元素,则返回 -1。
    6. Eremove(int index):移除集合中指定下标位置的元素。

二、ArrayList集合
  • ArrrayList集合是非线程安全的。
  • ArrayList集合默认初始化容量为10(底层先创建了一个长度为0的数组,当添加第一个元素的时候,初始化容量为10)
  • ArrayList集合的扩容:默认扩容到原容量的1.5倍。
  • ArrayList集合底层是一个Object[ ]数组
    1. 数组的优点检索效率高(每个元素占用的空间大小相同,内存地址是连续的,知道首元素内存地址,然后知道下标,通过数学表达式计算出元素的内存地址,所以检索效率最高)
    2. 数组的缺点:随机增删元素效率比较低,另外数组无法存储大数据量(很难找到一块非常巨大的连续的内存空间)
      注:但在数组末尾添加元素效率还是很高的,是不受影响的。
  • ArrayList的构造方法:
    ——new ArrayList(); //默认初始化容量
    ——new ArrayList(20); //自定义初始化容量
  • ArrayList集合底层是数组,怎么优化?
    ——尽可能的减少扩容次数。因为数组扩容效率比较低,建议在使用ArrayList集合的时候预估计元素的个数,给定一个初始化容量。
  • 将线程不安全的ArrayList集合转换为线程安全的
    ——java.util.Collections:集合工具类
    ——使用 Collections.synchronizedList() 方法
  • 所有集合中,ArrayList集合用的比较多
    ——因为往数组末尾添加元素时效率是不受影响的,另外在使用检索/查找某个元素的操作比较多。

三、LinkedList集合
  • LinkedList集合没有初始化容量(最初这个双向链表中没有任何元素。first和last引用都是null的)
  • LinkedList集合底层是一个双向链表
    1. 链表的优点:由于链表上的元素在空间存储上内存地址不连续,所以随机增删元素的时候不会有大量的元素位移,因此随机增删效率较高
    2. 链表的缺点:不能通过数学表达式计算被查找元素的内存地址,每一次查找都是从头节点开始遍历,直到找到为止,所以LinkedList集合检索/查找效率较低。
  • 链表数据结构示意图:
    • 单向链表
      在这里插入图片描述
    • 双向链表(LinkedList集合)
      在这里插入图片描述
  • 案例
    在这里插入图片描述
    public class LinkedListTest01 {
     	public static void main(String[] args) {
         	List list = new LinkedList();
         	list.add("a");
         	list.add("b");
         	list.add("c");
         	for (int i = 0; i < list.size(); i++) {
             	System.out.println(list.get(i));
         	}
     	}
    }
    

四、Vector集合
  • Vector集合是线程安全的。
    ——Vector集合中所有方法都是线程同步的,都带有synchronized关键字,是线程安全的,效率较低,使用较少
  • Vector集合默认初始化容量是10。
  • Vector集合的扩容:默认扩容到原容量的2倍。
  • Vector集合底层是一个Object[ ]数组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值