首页 > 编程语言 >Java面试题 P11:ArrayList和LinkedList区别

Java面试题 P11:ArrayList和LinkedList区别

时间:2023-07-28 13:34:45浏览次数:53  
标签:面试题 遍历 Java LinkedList ArrayList list 索引 println

ArrayList:基于动态数组,连续内存存储,适合下标访问(随机访问),扩容机制:因为数组长度固定,超出长度存数据时需要新建数组,然后将老数组的数据拷贝到新数组,如果不是尾部插入数据还会涉及到元素的移动(往后复制一份,插入新元素),使用尾插法并指定初始容量可以极大提升性能,甚至超过linkedList

LinedList:基于链表,可以存储在分散的内存中,适合做数据插入及删除操作,不适合查询:需要逐一遍历。遍历LinkedList需要使用iterator不能使用for循环,因为每次for循环体内通过get(i)取得某一元素时都需要对list重新进行遍历,性能消耗极大。

另外不要试图使用indexOf等返回元素索引,并利用其进行遍历,使用indexOf对list进行了遍历,当结果为空时会遍历整个列表。

ArrayList常用方法

 1         //泛型,T可以表示不同类型的集合,String int Object
 2         //ArrayList<T> listT=new ArrayList<T>();
 3         //创建String类型的集合对象:
 4         ArrayList<String> list=new ArrayList<>();
 5         //添加元素:
 6         list.add("大小姐");
 7         //设定指定索引上的元素,必须是已存在的索引
 8         list.set(0,"大小姐==");
 9         //获取list元素的个数
10         System.out.println(list.size());
11         //获取指定索引的值
12         System.out.println(list.get(0));
13 
14         //添加元素,index索引必须目前索引值+1,否则会报数组越界
15         list.add((list.size()-1)+1,"二小姐");
16 
17         ArrayList<String> newList1=new ArrayList<>();
18         //利用Collections(集合工具类)做批量添加,索引必须是已存在的,或者当前索引+1,如果是已存在的索引,addAll后会将占用的索引整体下移
19         Collections.addAll(newList1, "aaa", "bbb", "ccc", "ddd");
20         //list.addAll((list.size()-1)+1,newList1);
21         list.addAll(0,newList1);
22 
23         //for循环 遍历集合
24         for(int i=0;i<list.size();i++){
25             System.out.println("索引 "+i+" 的值:"+list.get(i));
26         }
27 
28         //判断结合是否包含元素x,x的值必须是完整内容,不可模糊
29         System.out.println(list.contains("大小姐=="));
30         //获取集合中第一次出现x元素的下标
31         System.out.println(list.indexOf("ccc"));
32         //如果是有重复值,获取集合中最后一次出现ccc元素的下标
33         System.out.println(list.lastIndexOf("ccc"));
34 
35         //根据下标删除元素
36         list.remove(1);
37         //根据元素删除元素
38         list.remove("ccc");
39         System.out.println("foreach遍历");
40         //foreach遍历集合
41         for (String item:list){
42             System.out.println(item);
43         }
44         System.out.println("迭代器遍历");
45         //迭代器遍历
46         Iterator<String> it=list.iterator();
47         while(it.hasNext()){
48             System.out.println(it.next());
49         }
50         System.out.println("遍历 ListIterator");
51         //遍历 ListIterator
52         ListIterator<String> listIterator=list.listIterator();
53         while (listIterator.hasNext()){
54             System.out.println(listIterator.next());
55         }

 

 

LinkedList常用方法与ArrayList常用方法相同

1         //linkedList独有方法
2         LinkedList<String> linkedList=new LinkedList<>();
3         //将元素添加到集合第一个位置
4         linkedList.addFirst("x");
5         linkedList.addLast("y");

 

标签:面试题,遍历,Java,LinkedList,ArrayList,list,索引,println
From: https://www.cnblogs.com/wuzexin/p/17586919.html

相关文章

  • Java定时弹窗提示与展示图片
    自顶向下介绍,首先是定时弹窗功能,可以用Java自带的ScheduledExecutorService库完成函数调用。packagehealthReminder;importjava.util.concurrent.Executors;importjava.util.concurrent.ScheduledExecutorService;importjava.util.concurrent.TimeUnit;publicclassT......
  • centos俩个java版本共存
    环境背景centos7.9,java8,java11,Jenkins2.401.3本来想装老版的jenkins,但是各种插件装不上,而新版的jenkins又依赖java11,但maven的打包又是java8的,所以必须要折腾下了步骤下载jdk8,jdk11安装包略解压改名[root@VM-4-12-opencloudoshome]#lsjdk-11.0.18_linux-x64_bin.tar.g......
  • Java中常见的网络通信模型
    目前最近仔学习RocketMQ以及Dubbo还有Spring5框架的底层部分,了解到这些技术的底层都是采用的Netty作为底层的通信的软件,于是便需要详细了解以下网络中的通信的模型以及Netty的通信模型原理。本篇是通过Redis以及Netty进行网络通信模型的逐渐演化来进行介绍,其中还会夹杂着一些比......
  • Java复制
    将一个对象的引用复制给另外一个对象,一共有三种方式。第一种是直接赋值,第二种方式是浅拷贝,第三种是深拷贝。所以大家知道了哈,这三种概念都是为了拷贝对象。直接赋值复制直接赋值。在Java中,Aa1=a2,我们需要理解的是这实际上复制的是引用,也就是说a1和a2指向的是同一个对象。因......
  • java项目更改jdk版本出现问题
    这里demo中的java版本出了点问题,将jdk17改为jdk11打开项目结构设置Project中的SDK和Languagelevel为jdk11。一、java:错误:不支持发行版本17 打开settings中的JavaCompiler修改module中项目的java版本二、java:错误:无效的源发行版:17 打开项目结构,找到下图界面修改J......
  • java面试题带链接
    下面是在网下下载的,不知道哪来的了,发出来方便查看一、Java基础1.String类为什么是final的。https://www.zhihu.com/question/313455922.HashMap的源码,实现原理,底层结构。get(key)方法时获取key的hash值,计算hash&(n-1)得到在链表数组中的位置first=tab[hash&(n-1)],先判断first的k......
  • 要实现Java中的Excel导入导出功能,可以使用Apache POI库。
    下面是一个简单的示例:导入Excel文件:importorg.apache.poi.ss.usermodel.*;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;importjava.io.FileInputStream;importjava.io.IOException;publicclassExcelImportExample{publicstaticvoidmain(String[]args){......
  • Java 大后端各种架构图汇总
    1.java类加载器架构2.JVM架构3.Java技术体系4.线程运行架构5.Java体系(编译与运行)结构6.JMS技术架构7.JMX技术架构8.Spring架构9.Hibernate架构10.ibatis架构11.Struts2架构12.Struts1架构13.JBPM14.EJB技术架......
  • SHA1签名算法,JAVA和C#
    java:publicstaticvoidmain(String[]args)throwsNoSuchAlgorithmException{Stringtoken="31a4a1aa-cffc-4aca-9ef6-0497edf7fbed";Stringnonce="Rzem0rlz19e6GZuZuFKyDzaxiS4baaqn8uvxVnntXKS";Stringtimestamp="1646......
  • JavaAPI
    Scanner类该类是文本扫描类构造方法//创建一个扫描输入内容的扫描器Scannersc=newScanner(Sytem.in);//扫描文本内容的扫描器Filefile=newFile("C:\\Users\\Administrator\\Desktop\\test.txt");Scannersc=newScanner(file);类中方法//从键盘中读取内容int......