首页 > 其他分享 >从面向对象的角度看集合类,以List<String> list = new ArrayList<>()为例

从面向对象的角度看集合类,以List<String> list = new ArrayList<>()为例

时间:2024-02-27 22:22:58浏览次数:24  
标签:为例 List ArrayList list 接口 new 方法

心血来潮琢磨了这么一个问题:
List list = new ArrayList<>();
这句代码挺常用的,但是如果要从面向对象的角度去讲讲这句代码背后的逻辑,该怎么讲?
好像真不容易一口气说完整,于是便有了本文的梳理。

从关系图我们可以知道,ArrayList继承自一个抽象类AbstractCollection,它们都实现了List接口。

查阅源码可知,AbstractCollection实现了接口List中的部分方法(比如add(E e)),但有些方法并没有实现(比如get(int index)仍然是抽象方法)。
而ArrayList作为非抽象类,必然要实现List中的所有抽象方法。ArrayList中所有来自List的方法,既可以理解为接口的实现,也可以理解为对父类方法的重写。

现在,让我们回头再看看开头那句代码:
右边是一个ArrayList对象,左边是一个List接口,是不是很像“父类引用指向子类对象”?
将一个实现类ArrayList向上转型(upcasting)成list接口。通过list调用方法时,实际调用的是ArrayList中的方法,这就实现了多态。

标签:为例,List,ArrayList,list,接口,new,方法
From: https://www.cnblogs.com/debug1379/p/18038376

相关文章

  • C++ STL 容器 list类型
    C++STL容器list类型list对于异常支持很好,要么成功,要么不会发生什么事情以下是std::list在异常处理方面表现良好的几个原因:动态内存管理:std::list使用动态内存分配来存储元素,这意味着它会在需要时自动分配内存,并在不再需要时释放内存。这种自动管理可以减少内存泄漏和悬......
  • Qt QList使用总结
    概述QList是Qt的泛型容器类之一。它将项目存储在一个列表中,该列表提供基于索引的快速访问以及基于索引的插入和删除。QList、QLinkedList和QVector提供了类似的API和功能。它们通常是可互换的,但性能有所区别。QVector应该是默认首选的容器QList是最广泛用于QtAPI中传递值......
  • Qt QList的用法
    在Qt中,QList 是一个常用的容器类,用于存储元素的动态数组。以下是简单的QList用法:1、包含头文件在使用QList之前,确保包含相应的头文件。#include<QList>2、创建QList对象使用QList模板创建一个对象,并指定存储的数据类型。QList<int>myList;//创建一个......
  • Qt QVector、QList、QSet和QMap:性能与用途比较
    Qt提供了多种容器类,用于存储和管理数据。其中,QVector、QList、QSet和QMap是最常用的几种。这些容器类在性能和用途方面存在一些差异,选择合适的容器对于提高应用程序的效率和正确性至关重要。下面我们将从以下几个方面对这四种容器进行比较:1.存储方式QVector:动态数组,元素在......
  • redis自学(6)SkipList
    SkipListSkipList(跳表)首先是链表,但与传统链表相比有几点差异:  元素按照升序排列存储  节点可能包含多个指针,指针跨度不同(最多允许32级指针,跨度成倍数递增)    SkipList的特点:  跳跃表是一个双向链表,每个节点都包含score和ele值  节点按照score值排序,sc......
  • Android权限警告(not in privapp-permissions whitelist)
    1.现象模块使用了Settings.Global之后,单编模块push到手机里面重启,发现手机卡在开机logo界面,开不了机2.抓取logcat看log打印会发现如下图片中的打印,主要的关键词为Privilegedpermissionsnotinprivapp-permissionswhitelist二.查找源码定位问题(Q的代码)文件路径PermissionM......
  • List转Map
    //以userid为主,重复数据不获取,不会抛出异常Map<Long,UserLoginLog>longDateMap=userLoginLogList.stream().collect(Collectors.toMap(UserLoginLog::getUserId,Function.identity(),(key1,key2)->key1));//业务逻辑if(longDateMap.containsKey(listVo.getUserI......
  • ImageList1控件的使用原则
    ImageList1的功能是设计时候,保存好一系列的图片。在设计加载后,绑定好使用控件,这里我们以TrayIcon1控件为例子 要更改 TrayIcon1控件的图标属性,  不能通过修改ImageList1,  要通过更改 TrayIcon1控件的相关属性,     TrayIcon1.IconIndex:=1;Imag......
  • 通过多个字段作为唯一标识对List对象去重
    1、背景List对象定义形式和现有的值如下所示。List<Test>testList=newArrayList<>();[{"ISDEL":"","ATNAM":"Z008_80_PC_4270Y153","AEDTM":"20230808","MATNR":"80.PC......
  • redis自学(5)QuickList
    问题1:ZipList虽然节省内存,但申请内存必须是连续空间,如果内存占用较多,申请内存效率很低。怎么办?为了缓解这个问题,我们必须限制ZipList的长度和entry大小。问题2:但是我们要存储大量数据,超出了ZipList最佳的上限怎么办?我们可以创建多个ZipList来分片存储数据。问题3:数据拆分后比......