百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

List集合简单总结(list集合常用方法)

toyiye 2024-07-15 01:22 8 浏览 0 评论

参考书籍java疯狂讲义所做的学习总结。我相信我还会回来的!

一、概要:List集合是一个元素有序,可重复的集合,该接口是Collection接口的子接口。List接口下接口的实现类有,ArrayList、LinkedList、Vector,其中Vector年龄较大(1.0版本就存在了)

二、List接口中常用的方法

》void add(int index,Object element):将元素element插入到集合的index处。

》boolean addAll(int index,Collection c):将集合c所包含的元素都插入到List集合的index处。

》Object get(int index):返回集合index处的索引处的元素。

》int indexOf(Object o):返回对象o在List集合中第一次出现的位置索引。

》int lastIndexOf(Object o):返回对象o在List集合中最后一次出现的索引。

》Object remove(int index):删除并返回index索引处的元素。

》Object set(int index,Object element):将index索引处的元素替换为element对象,返回新元素。

》List subList(int fromIndex,int toIndex):返回从索引fromIndex(包含)到toIndex(不包含)处所有集合元素组成的子集合。

部分用法如下:


  1. import java.util.ArrayList;
  2. import java.util.Vector;
  3. public class ListTest {
  4. public static void main(String[] args) {
  5. //创建集合对象
  6. ArrayList<String> list1 = new ArrayList<String>();
  7. //add(E e):添加元素
  8. list1.add("hello");
  9. list1.add("world");
  10. list1.add("java");
  11. //add(int index,E element):在指定的索引处添加一个元素
  12. list1.add(1, "android");
  13. System.out.println("array:"+list1);
  14. //========================================================
  15. //创建集合对象
  16. ArrayList<String> array = new ArrayList<String>();
  17. //添加元素
  18. array.add("hello");
  19. array.add("world");
  20. array.add("java");
  21. //public E get(int index):返回指定索引处的元素
  22. System.out.println("get:"+array.get(0));
  23. System.out.println("get:"+array.get(1));
  24. System.out.println("get:"+array.get(2));
  25. //public int size():返回集合中的元素的个数
  26. System.out.println("size:"+array.size());
  27. //public boolean remove(Object o):删除指定的元素,返回删除是否成功
  28. System.out.println("remove:"+array.remove("world"));//true
  29. System.out.println("remove:"+array.remove("world"));//false
  30. //public E remove(int index):删除指定索引处的元素,返回被删除的元素
  31. System.out.println("remove:"+array.remove(0));
  32. //public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
  33. System.out.println("set:"+array.set(0, "android"));
  34. //输出
  35. System.out.println("array:"+array);
  36. }
  37. }

三、遍历List集合的三种方式


  1. public class ListSearchTest {
  2. public static void main(String[] args) {
  3. List list = new ArrayList<>();
  4. list.add(0);
  5. list.add(1);
  6. list.add(2);
  7. list.add(3);
  8. //No1:for循环遍历
  9. for (int i = 0; i < list.size(); i++) {
  10. System.out.println(list.get(i));
  11. }
  12. System.out.println("==============================");
  13. //No2:foreach遍历
  14. for (Object object : list) {
  15. System.out.println(object);
  16. }
  17. System.out.println("==============================");
  18. //No3:使用Iterator迭代器
  19. Iterator iterator = list.iterator();
  20. while(iterator.hasNext()){
  21. System.out.println(iterator.next());
  22. }
  23. }
  24. }

关于迭代器Iterator的使用:Iterator接口也是java集合框架的成员,但它与Collection,Map集合不一样,Collection集合和Map集合主要用户装对象,而Iterator主要用于遍历,Iterator本身病不提供盛装对象的能力;还有一点需要注意的是,当时用Iterator遍历Collection集合元素时,只有通过Iterator的romove方法删除上一次next方法返回的集合元素才可以,否则的话,会引发java.util.ConcuurentModdificationException异常。

三、ArrayList的使用以及存储原理

ArrayList和Vector是基于数组实现的List类,所以AyyayList和Vector类封装了一个动态的、允许再分配的Object数组。ArrayList或Vector对象使用initialCapacity参数设置数组的长度,当向ArrayList和Vector中添加元素超出该数组的长度时,他们的initialCapacity会自动增加。数组进行扩容时,会将老数组中的元素重新拷贝一份到新的数组中,每次数组的增长大约是其原容量的1.5倍。如果向ArrayList或Vector集合中添加大量元素时,可使用ensureCapacity(int X)方法一次性地增加initialCapacity.可减少重分配的次数,从而提高性能。(摘自疯狂java讲义)

关于具体ArrayList的实现原理,推荐前辈博客:https://www.cnblogs.com/ITtangtang/p/3948555.html

四、LinkedList的使用原理

1.LinkedList是一个双向链表,它也可以被当作堆栈、队列或双端队列进行操作。既然其底层的数据结构是链表,必然每个节点中的存储都是:前一个节点的位置信息,节点数据和后一个节点的位置信息。正是因为此结构,所以在进行增删元素的时候效率特别高,不需要像ArrayList那样还要按索引查找,在进行增加,删除元素,然后还需要更新索引结构。LinkedList在进行增删的时候,只需要修改上一个元素的后节点信息和下一个元素的前节点信息即可。但是在查询的时候就慢了,它只能依次访问集合中的每个元素,找不到的话,就根据链表继续向下走,去访问下一个元素。

2.使用LinkedList模拟队列:


  1. /*
  2. *LinkeList:链表集合.
  3. */
  4. public class LinkedListTest1 {
  5. public static void main(String[] args) {
  6. LinkedList<Object> ll = new LinkedList<>();
  7. ll.addFirst("a");
  8. ll.addFirst("b");
  9. ll.addFirst("c");
  10. ll.addFirst("d");
  11. System.out.println(ll); // 倒序的效果. 输出[d,c,b,a]
  12. Object first = ll.getFirst() ;
  13. System.out.println(first); //d
  14. Object last = ll.getLast();
  15. System.out.println(last); //a
  16. }
  17. }
  18. 3.使用LinkedList模拟栈:
  19. public class LinkedListTest2 {
  20. public static void main(String[] args) {
  21. //创建 LinkedList
  22. LinkedList<Object> ll = new LinkedList<>();
  23. //a先压栈,b,c以此压栈
  24. ll.push("a");
  25. System.out.println(ll);//[a]
  26. ll.push("b");
  27. System.out.println(ll);//[b,a]
  28. ll.push("c");
  29. System.out.println(ll); //[c,b,a]
  30. //弹栈,先进后出
  31. System.out.println(ll.pop()); //c
  32. System.out.println(ll);//[b,a]
  33. System.out.println(ll.pop()); //b
  34. }
  35. }

五、线程安全问题

ArrayList是线程不安全的集合,当有多个线程访问同一个Arraylist的集合时,如果有超过一个线程修改了ArrayList集合,则必须手动保证该集合的同步性。使用Conllections类中提供的syschronizedXXX()方法,该方法将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时带来的线程安全问题。


  1. public class CollectionTest {
  2. public static void main(String[] args) {
  3. //创建4个同步的集合对象
  4. Collection c = Collections.synchronizedCollection(new ArrayList());
  5. List<Object> list = Collections.synchronizedList(new ArrayList<Object>());
  6. Set<Object> set = Collections.synchronizedSet(new HashSet<Object>());
  7. Map<Object, Object> map = Collections.synchronizedMap(new HashMap<Object,Object>());
  8. }
  9. }

六、ArrayList和LinkedList性能比较

1.ArrayList做查询比较快,但是增删的时候比较满。当插入或删除元素时,还要涉及数组元素的移动等内存操作。

2.LinkedList做增删比较快,但是查询慢。LinkedList使用双向链表实现存储,形成一个按序号索引的线性结构,与数组存储的方式相比,按序号索引数据需要进行前向或后向遍历,但是插入数据的时候,只需要记录本项的前后项即可,所以插入较快,删除同样。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码