Java笔记(十四)

本文详细介绍了JavaList接口的特性,包括常用方法如add、set和sort,以及其主要实现类ArrayList(基于数组)、Vector(线程安全但效率低)和LinkedList(双向链表)的使用场景、性能分析和源码剖析。
摘要由CSDN通过智能技术生成

07List接口

List接口常用方法

List集合存储元素特点:有序可重复。 有序:是因为List集合中的元素都是有下标的,从0开始,以1递增。 可重复:存进去1,还可以再存一个1。 List接口下常见的实现类有: ArrayList:数组 Vector、Stack:数组(线程安全的) LinkedList:双向链表 List接口特有方法:(在Collection和SequencedCollection中没有的方法,只适合List家族使用的方法,这些方法都和下标有关系。) void add​(int index, E element) 在指定索引处插入元素 E set​(int index, E element); 修改索引处的元素 E get​(int index); 根据索引获取元素(通过这个方法List集合具有自己特殊的遍历方式:根据下标遍历) E remove​(int index); 删除索引处的元素 int indexOf​(Object o); 获取对象o在当前集合中第一次出现时的索引。 int lastIndexOf​(Object o); 获取对象o在当前集合中最后一次出现时的索引。 List<E> subList​(int fromIndex, int toIndex); 截取子List集合生成一个新集合(对原集合无影响)。[fromIndex, toIndex) static List<E> of​(E... elements); 静态方法,返回包含任意数量元素的不可修改列表。(获取的集合是只读的,不可修改的。)

List接口特有迭代

特有的迭代方式 ListIterator<E> listIterator(); 获取List集合特有的迭代器(该迭代器功能更加强大,但只适合于List集合使用) ListIterator<E> listIterator(int index); 从列表中的指定位置开始,返回列表中元素的列表迭代器 ListIterator接口中的常用方法: boolean hasNext();         判断光标当前指向的位置是否存在元素。 E next();                将当前光标指向的元素返回,然后将光标向下移动一位。 void remove();            删除上一次next()方法返回的那个数据(删除的是集合中的)。remove()方法调用的前提是:你先调用next()方法。不然会报错。 void add​(E e);            添加元素(将元素添加到光标指向的位置,然后光标向下移动一位。) boolean hasPrevious();    判断当前光标指向位置的上一个位置是否存在元素。 E previous();            获取上一个元素(将光标向上移动一位,然后将光标指向的元素返回) int nextIndex();        获取光标指向的那个位置的下标 int previousIndex();    获取光标指向的那个位置的上一个位置的下标 void set​(E e);            修改的是上一次next()方法返回的那个数据(修改的是集合中的)。set()方法调用的前提是:你先调用了next()方法。不然会报错。

List接口使用Comparator排序

回顾数组中自定义类型是如何排序的? 所有自定义类型排序时必须指定排序规则。(int不需要指定,String不需要指定,因为他们都有固定的排序规则。int按照数字大小。String按照字典中的顺序) 如何给自定义类型指定排序规则?让自定义类型实现java.lang.Comparable接口,然后重写compareTo方法,在该方法中指定比较规则。 List集合的排序 default void sort​(Comparator<? super E> c);  对List集合中元素排序可以调用此方法。 sort方法需要一个参数: java.util.Comparator。我们把这个参数叫做比较器。这是一个接口。 如何给自定义类型指定比较规则?可以对Comparator提供一个实现类,并重写compare方法来指定比较规则。 当然,Comparator接口的实现类也可以采用匿名内部类的方式。

08ArrayList

ArrayList ArrayList集合底层采用了数组这种数据结构。 ArrayList集合优点: 底层是数组,因此根据下标查找元素的时间复杂度是O(1)。因此检索效率高。 ArrayList集合缺点: 随机增删元素效率较低。不过只要数组的容量还没满,对末尾元素进行增删,效率不受影响。 ArrayList集合适用场景: 需要频繁的检索元素,并且很少的进行随机增删元素时建议使用。 ArrayList默认初始化容量? 从源码角度可以看到,当调用无参数构造方法时,初始化容量0,当第一次调用add方法时将ArrayList容量初始化为10个长度。 ArrayList集合扩容策略? 底层扩容会创建一个新的数组,然后使用数组拷贝。扩容之后的新容量是原容量的1.5倍。 ArrayList集合源码分析: 属性分析 构造方法分析(使用ArrayList集合时最好也是预测大概数量,给定初始化容量,减少扩容次数。) 添加元素 修改元素 插入元素 删除元素

09Vector

Vector Vector底层也是数组,和ArrayList相同。 不同的是Vector几乎所有的方法都是线程同步的(被synchronized修饰:线程排队执行,不能并发),因此Vector是线程安全的,但由于效率较低,很少使用。因为控制线程安全有新方式。 Vector初始化容量:10 Vector扩容策略:扩容之后的容量是原容量的2倍。

10链表存储结构

11LinkedList

LinkedList LinkedList是一个双向链表 源码分析: 属性分析 构造方法分析 添加元素 修改元素 插入元素 删除元素 手写单向链表

  • 17
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值