返回顶部
首页 > 资讯 > 后端开发 > Python >Java中ArrayList和SubList的坑面试题
  • 915
分享到

Java中ArrayList和SubList的坑面试题

2024-04-02 19:04:59 915人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录代码复现源码解析附:ArrayList的subList简单介绍和使用总结代码复现 不要,思考一下会打印出什么? List<String> list1

代码复现

不要,思考一下会打印出什么?

        List<String> list1 = new ArrayList<>(Arrays.asList("username", "passwd"));
        List<String> list2 = list1.subList(0, 2);
        list2.add("email");
        System.out.println(list1);
        System.out.println(list2);

执行结果:

你是否感觉疑惑?在想为什么在list2添加的在list1也添加是吧?

源码解析

subList接口

List<E> subList(int fromIndex, int toIndex);

我们使用的是ArrayList,所以是选择ArrayList即可

    public List<E> subList(int fromIndex, int toIndex) {
    subListRangeCheck(fromIndex, toIndex, size);
    return new SubList(this, 0, fromIndex, toIndex);
}

fromIndex是从List元素开始索引,toIndex是List元素结束索引,subListRangeCheck方法是检查是否在允许范围之内。

    static void subListRangeCheck(int fromIndex, int toIndex, int size) {
    	//开始索引小于0
        if (fromIndex < 0)
            throw new IndexOutOfBoundsException("fromIndex = " + fromIndex);
            //结束索引大于容量
        if (toIndex > size)
            throw new IndexOutOfBoundsException("toIndex = " + toIndex);
            //开始索引大于结束索引
        if (fromIndex > toIndex)
            throw new IllegalArgumentException("fromIndex(" + fromIndex +
                                               ") > toIndex(" + toIndex + ")");

重头戏在new SubList(this, 0, fromIndex, toIndex);这里,看看下面的SubList就会知道,this关键字将当前对象的引用也就是list1传入了SubList,把传入的list1变成parent赋值给SubList内部成员,然后又将这个构造生成的赋值给list2,也就是说list1和list2是引用了同一个对象,指向的是同一list。

        SubList(AbstractList<E> parent,
                int offset, int fromIndex, int toIndex) {
             //问题就出现在这里
            this.parent = parent;
            this.parentOffset = fromIndex;
            this.offset = offset + fromIndex;
            this.size = toIndex - fromIndex;
            this.modCount = ArrayList.this.modCount;
        }

再来看看list2.add的源码,将元素直接添加在list1和list2共同的list引用对象上,这就是为什么list2添加了,list1也添加了。

        public void add(int index, E e) {
            rangeCheckForAdd(index);
            checkForComodification();
            //将元素直接添加在list1和list2共同的list引用对象上
            parent.add(parentOffset + index, e);
            this.modCount = parent.modCount;
            this.size++;
        }

附:ArrayList的subList简单介绍和使用

subList(int fromIndex, int toIndex);

它返回原来list的从[fromIndex, toIndex)之间这一部分其实就是list的子列表(注意:fromIndex是 [ 说明包括其本身,toIndex是 )说明不包括其本身)。

这个子列表的本质其实还是原列表的一部分;也就是说,修改这个子列表,将导致原列表也发生改变。

举例说明

list中包含1,2,3,4,5,6一共6个元素,list.subList(1,3)返回的是2,3(list以0为开始)

还有一个经常使用的list.subList(1,list.size)

list中包含1,2,3,4,5,6一共6个元素,list.subList(1,list.size)返回的是2,3,4,5,6(list以0为开始)

总结

到此这篇关于Java中ArrayList和SubList的坑面试题的文章就介绍到这了,更多相关ArrayList和SubList面试题内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java中ArrayList和SubList的坑面试题

本文链接: https://lsjlt.com/news/149783.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java中ArrayList和SubList的坑面试题
    目录代码复现源码解析附:ArrayList的subList简单介绍和使用总结代码复现 不要,思考一下会打印出什么? List<String> list1 ...
    99+
    2024-04-02
  • Java中ArrayList和SubList的坑怎么解决
    本文小编为大家详细介绍“Java中ArrayList和SubList的坑怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中ArrayList和SubList的坑怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-06-30
  • Java面试岗常见问题之ArrayList和LinkedList的区别
    目录1.ArrayList和LinkedList是什么?2.ArrayList和LinkedList性能比较          &n...
    99+
    2024-04-02
  • java面试中有哪些基础面试题
    这篇“java面试中有哪些基础面试题”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java面试中有哪些基础面试题”文章吧。作...
    99+
    2023-06-03
  • Java面试中有哪些关于String类的面试题
    这篇文章将为大家详细讲解有关Java面试中有哪些关于String类的面试题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。比较两个字符串时使用“==”还是equals()方法?当然是equal...
    99+
    2023-05-31
    java 中有 string
  • Java中Mybatis的面试题有哪些
    这篇文章给大家分享的是有关Java中Mybatis的面试题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. MyBatis 中 #{}和 ${}的区别是什么?#{}是预编译处理,${}是字符替换。 在使用...
    99+
    2023-06-20
  • Java常见的面试题
      1)Java 中能创建 volatile 数组吗  能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。我的意思是,如果改变引用指向的数组,将会受到 volatile 的保护,但是如果多个线...
    99+
    2023-06-03
  • Java面试题中常见的问题有哪些
    本篇内容主要讲解“Java面试题中常见的问题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java面试题中常见的问题有哪些”吧!  1、java 中会存在内存泄漏吗,请简单描述。  答:会...
    99+
    2023-06-02
  • Java中有哪些Spring面试题
    本篇内容主要讲解“Java中有哪些Spring面试题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中有哪些Spring面试题”吧!谈谈你对 Spring 的理解?Spring 是一个开源...
    99+
    2023-06-16
  • Java中21道面试题解析
    小编给大家分享一下Java中21道面试题解析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!面试题解析Map 的底层结构?(HashMap)评注:老题目了,各位面试...
    99+
    2023-06-02
  • Java开发中的面试题有哪些
    本篇内容主要讲解“Java开发中的面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java开发中的面试题有哪些”吧!一、super() 方法的用法及作用?有如下Java类:public...
    99+
    2023-06-17
  • java中的Spring Boot面试题有哪些
    这篇文章主要讲解了“java中的Spring Boot面试题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java中的Spring Boot面试题有哪些”吧!什么是 Spring Bo...
    99+
    2023-06-16
  • 常见的java string面试题
    常见的java string面试题?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、...
    99+
    2023-06-14
  • 常见的Java面试问题
    JVMJava虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。什么是字节码采用字节码的好处是什么在 Java 中,J...
    99+
    2023-06-03
  • Java中LinkedList和ArrayList的效率分析
    在 Java 中,LinkedList 和 ArrayList 的性能是不同的,具体取决于你所需要的操作。 对于频繁的插入和删除操作,LinkedList 的性能通常更好,因为它使用...
    99+
    2023-02-10
    Java LinkedList和ArrayList效率 Java LinkedList ArrayList
  • Java中高级面试题(附答案)
    1、redis如何跟本地数据同步?程序实现mysql更新、添加、删除就会同步操作redis程序查询redis,不存在就查询mysql,自动保存redis2、redis几种数据结构?set、list、hash、string、zset3、jav...
    99+
    2018-05-12
    java面试题 java 高级面试题 中级
  • java数组中有什么面试题
    这篇文章给大家分享的是有关java数组中有什么面试题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序...
    99+
    2023-06-14
  • java中io流面试题有哪些
    这篇文章主要介绍了java中io流面试题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java可以用来干什么Java主要应用于:1. web开发;2. Android开...
    99+
    2023-06-14
  • Java中关于锁的面试题有哪些
    这篇文章主要介绍Java中关于锁的面试题有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queue队列:有序,可重复的;3...
    99+
    2023-06-14
  • java中反射面试题的示例分析
    这篇文章将为大家详细讲解有关java中反射面试题的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作