Collection子接口之一:List接口

1 篇文章 0 订阅
1 篇文章 0 订阅

List接口概述

鉴于Java中数组用来存储数据的局限性,我们通常使用List替代数组

 List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。

 List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据 序号存取容器中的元素。

 JDK API中List接口的实现类常用的有:ArrayList、LinkedListVector

个人理解如下:

        List是一个动态数组,不用担心不够脚标越界的异常,或者太大占用内存,浪费启动时间。

--------------------------------------------------------------------------------------------------------------------------------

        Collection接口:单列集合,用来存储一个一个兑现

                List接口:存储有序的、可重复的数据。且动态替换原有数组

                实现类:ArrayList:作为list接口的主要实现类,线程不安全,效率高;底层使用 Object[ ] elementData存储

                              LinkedList:对于多数据且频繁的插入、删除操作, LinkedListArrayList效率高;底层使用双向链表双向链表

                              Vector:古老实现类,一开始属于jdk1.0的,后来jdk1.2出来后到jdk1.2下,不怎么用。线程安全,效率低;底层使用 Object[ ] elementData存储

        2.ArrayListjdk7中的对象创建类似于单列的饿汉式(在底层创建长度为10的Objec),而在

jdk8中的对象创建类似于单列的懒汉式(底层的Object[] elemenData初始化为{ }.({空})并没有创

建长度,第一次add()时创建长度为10的数组);且两者如果下次list.add()导致底层

elementData数组不够,这扩容默认情况下为原容量的1.5倍(jdk8是1.5倍+2),同时将原有的数

组中的数据复制到新的数组中。

        3.LinkedList(建议了解且会用就就可以,如果想深层次的了解学习算法可以看源码)

        在内部声明了Node类型firstlast属性默认为空,双向链表结构: [first,“数据”,last]

首个为[null,“数据”,last],末尾为[first,“数据”,null],即first指向上一个,last指向下一个,创建删除即first指向上上一个,或last指向下下一个,就是三个数之间的关系。

        4. Vector:在底层创建长度为10的Objec,扩容为两倍。

面试题:ArrayList、LinkedList、Vector三者的异同?

同:三个类都实现了list接口,存储数据的特点相同:存储有序的、可重复的数据

不同:见上

--------------------------------------------------------------------------------------------------------------------------------

List接口方法

 List除了从Collection集合继承的方法外,List 集合里添加了一些根据索引来 操作集合元素的方法。

void add(int index, Object ele):在index位置插入ele元素

boolean addAll(int index, Collection eles):从index位置开始将eles中 的所有元素添加进来

Object get(int index):获取指定index位置的元素

int indexOf(Object obj):返回obj在集合中首次出现的位置

int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置

Object remove(int index):移除指定index位置的元素,并返回此元素

Object set(int index, Object ele):设置指定index位置的元素为ele

List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex 位置的子集合

红色为频繁较多使用

总结:常用方法

增:add(int index)

删:remove(int index)/ remove(Object obj)

改:set(int index, Object ele)

查:get(int index)

插:add(int index,Object ele)

长度:size()

遍历:1.Iterator迭代器方式

        

Iterator iterator = list.iterator();
while(iterator.hasNext()){
    System.out.println(iterator.next());
}

           2.增强for循环

for(Object obj : list){
    System.out.println(obj);
}

           3.普通循环

for(int i = 0;i < list.size(); i++){
    System.out.println(list.get(i))
}

           4.面试题

4.1

@Test
public void testListRemove() {
List list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
updateList(list);
System.out.println(list);//
}
private static void updateList(List list) {
list.remove(2);
}

4.2

@Test
public void testListRemove() {
List list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
updateList(list);
System.out.println(list);//
}
private static void updateList(List list) {
list.remove(new Integer(value:2));
}

--------------------------------------------------------------------------------------------------------------------------------

注解:博主新人写给自己和分享如有错误,请理解,欢迎指出问题          谢谢 谢谢 谢谢。                                                                 ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​         2021.6

答案:4.1[1,2]      4.2[1,3]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值