当前位置: 首页 >服务端 > Java学习笔记—集合—List集合

Java学习笔记—集合—List集合

List集合

1.1List集合概述

List是所有有序集合的顶层接口,List的实现集合允许元素重复(有相同的equals,hashcode),并且元素的存储是有序的(存储的顺序是按照添加的顺序),典型的实现类:java.util.ArrayList;

List的常见实现类:

  • ArrayList
  • LinkedList
  • Vector
1.1.1List接口的常见方法 (除继承Collection的方法之外)
  • add(int index,E e):向指定的位置插入元素

  • addAll(int index,Collection<? extends E> c):向指定的位置插入子集合

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

  • indexOf(Object obj):返回集合中指定元素第一次出现的索引

  • lastIndexOf(Object obj):返回集合中指定元素最后一次出现的索引

  • listIterator():获取一个可以进行上下迭代的列表迭代器

  • subList(int fromIndex,int toIndex):从集合的fromIndex(包含)位开始截取,截取到toIndex(不含),并返回子集合

  • remove(index i):根据索引删除元素

1.2ArrayList

ArrayListList中最常用的一个实现类,其内部是基于动态的Object数组实现的,允许存储重复的元素,元素的顺序按照添加元素的顺序来的,并且扩容的时候是每次扩容为原来的1.5倍,并且ArrayList是一个非线程安全的集合实现,即在多线程并发环境下可能造成结果不一致的情况出现,因此多线程的环境中使用时,一啊不能会选择加锁。

  • ArrayList常用方法
List<String> list = new ArrayList<>();//添加单个元素list.add("Hello");//在指定的索引添加元素list.add(1,"world");List<String> list1 = Arrays.asList("work","time");//添加一个子集合list.addAll(list1);list.addAll(0,list1);System.out.println(list);//返回集合大小System.out.println(list.size());//删除指定的元素list.remove("world");//删除指定索引的元素list.remove(0);//截取指定索引范围的元素[2,3)System.out.println(list.subList(2, 3));//判断结合是否为空System.out.println(list.isEmpty());//判断元素是否在集合中System.out.println(list.contains("world"));//清空集合中的元素list.clear();

1.3LinkedList

LinkedListList接口的另一个常见实现类,是基于链表(双向链表)实现的,其实现了List接口和Deque(双端队列),在对元素进行添加时,只需要修改元素首指针即可,因此在集合中对元素进行增删操作时效率较高,但是在进行查询时,因为没有类似数组的索引,每次搜索都需要从链表头开始,所以查询的时候效率较低。

LinkedList除具有List中常见的方法之外还具有以下常见方法:

LinkedList<Integer> list = new LinkedList<>();list.add(20);list.add(30);list.add(40);list.add(50);list.add(60);//获取集合大小System.out.println(list.size());//5//返回列表中国指定位置的元素System.out.println(list.get(3));//50//实现队列的方法list.addFirst(10);list.addLast(70);//获取集合中第一个元素System.out.println(list.getFirst());//10//获取集合中最后一个元素System.out.println(list.getLast());//70//去除栈顶元素,list.pop();System.out.println(list);//[20, 30, 40, 50, 60, 70]//返回栈顶元素,但是不删除Integer peek = list.

ArrayListLinkedList区别?

  • 从实现原理来看:
    • ArrayList是基于动态数组的实现
    • LinkedList是基于双向链表的实现
  • 从数据操作来看:
    • ArrayList可以通过索引访问元素,查询效率较高,但是对于元素的增删操作,是基于数组拷贝完成的,所以效率比较低。
    • linkedList直接通过首尾指针与各个节点相连,在对元素进行增删操作时只需要修改指针的指向即可,效率较高。但是在进行查询时,每次都要从头逐个进行查找,效率低。
  • 总结:
    • 查询多使用ArrayList
    • 增删操作多使用LinkedList

1.4Vector

java.util.Vector是在JDK1.0就已经存在的一个集合实现,内部是基于动态数组的实现,提供的对数据操作的方法都是线程安全synchronized,因此在多线程并发操作集合时数据的安全性能够得到保障,但是效率也会随机受影响。在容量扩充方面Vector当容量不足时会扩展为原来的2倍大小。另外从JDK1.2开始Vector被设置为从List接口实现(被集合收编)。

作者:小呆瓜不墨迹
来源链接:https://blog.csdn.net/qq_45045173/article/details/119190056

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/server/117287.html

标签:List
分享给朋友:

“Java学习笔记—集合—List集合” 的相关文章