谁能说明一下java里list这个类怎么用,要详细

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谁能说明一下java里list这个类怎么用,要详细相关的知识,希望对你有一定的参考价值。

List是一个接口,要使用这个类要用这个类的子类或者这个类的实现类去实例化它,比如
List list = new ArrayList;
List<T> T表示某种类型,可以是Object类,也可以是Object类的子类
list常用的方法
list.add(obj) 在list的结尾添加元素
list.add(i,obj) 在list指定的位置添加元素
list.addAll() 将另一个list添加到list中

list.remove(i) 删除指定位置的元素
参考技术A list 定义的时候 通常
List <Object> list=new ArrayList<Object>();
可以往list里面插入数据

一般用于保存数据库查询出来的结果数据
往list 里面添加对象 方法 list.add(obj)
参考技术B 大飒飒大飒飒 参考技术C 实例化:List[<数据类型>] list = new ArrayList[<数据类型>]();
获得集合内元素个数:list.size();

添加元素:
默认添加:list.add(e);
指定下标添加(添加后下标后的元素向后挪一位):list.add(index,e);

删除元素:
返回是否删除:list.remove(e);
直接删除指定下标的元素(只删除找到的第一个相符合的元素):list.remove(index);

替换元素(替换掉指定下标的元素):list.set(index,e);

取出元素:list.get(index);

清空集合:list.clear();

判断集合中是否存在某个元素(存在返回true,不存在返回false):list.contains(e);

对比两个集合中的所有元素:
两个对象一定相等:list.equals(list2);
两个对象不一定相等:list.hashCode() == list2.hashCode();
(两个相等对象的equals方法一定为true, 但两个hashcode相等的对象不一定是相等的对象。)

获得元素下标:
元素存在则返回找到的第一个元素的下标,不存在则返回-1:list.indexOf(e);
元素存在则返回找到的最后一个元素的下标,不存在则返回-1:list.lastIndexOf(e);

判断集合是否为空(空则返回true,非空则返回false):list.isEmpty();

返回Iterator集合对象:list.iterator();

将集合转换为字符串:list.toString();

截取集合(从fromIndex开始在toIndex前结束,[fromIndex,toIndex)):list.subList(fromIndex,toIndex);

将集合转换为数组:
默认类型:list.toArray();
指定类型(objects为指定类型的数组对象,并将转换好的数组赋值给objects数组):list.toArray(objects);本回答被提问者采纳

SAP ABAP里存在Java List这种集合工具类么?CL_OBJECT_COLLECTION了解一下

Jerry以前在工作中交替做着ABAP和Java开发时,总是在使用一种语言时,怀念另一种语言的便利之处,比如用ABAP开发时,怀念Java里以List为代表的功能强大,使用方便的集合工具类。

技术图片

List或许是众多Java初学者最先接触和掌握的Java集合工具接口之一。以最具代表性的实现类ArrayList为例,查看其源代码,发现ArrayList不过就是用面向对象的编程方式封装了对一个对象数组的常用操作,使其不仅支持Java原生Array的所有功能,同时也支持前者不具备的动态扩容功能。

技术图片

对Java稍有了解的开发者,要自己仿照着写出一个同样的ArrayList实现,并不是一件困难的事情。不过List接口和其众多实现类都是Java开发包的一部分,这使得Java开发者做应用开发时不用重复造轮子,可以直接使用,非常方便。

那么SAP ABAP里存在类似的集合工具类么?

首先我们有内表,具备Java Array的所有功能,并且功能和使用灵活度上来说都远胜后者。但内表的操作毕竟是一种面向过程的编程思路。ABAP里存在类似Java List的接口吗?

通过之前查看Java ArrayList的实现源代码,我们可以仿照其思路,在ABAP里实现一个一模一样的ABAP ArrayList出来,只需要定义一个行类型(Table Line)为对象引用的内表变量,再用面向对象编程方式实现对这个内表变量插入,删除,和按索引访问的功能即可。而Java ArrayList的动态扩容,ABAP内表原生就支持。

技术图片

事实上SAP CRM就采取了这种实现思路,CL_CRM_BOL_ENTITY_COL,这个工具类,从名称上就能判断出它是BOL实例的存储容器,提供了容器内BOL实例元素的插入,删除和遍历的功能。

技术图片

然而这个列表只能插入类型为BOL实例的元素,有更通用的ABAP List工具类么?那就是CL_OBJECT_COLLECTION, 提供了类似Java ArrayList对列表元素的基本操作:

  • 插入
  • 删除
  • 按索引访问
  • 遍历
  • 清空列表

技术图片

这个工具类内部维护的内表类型为TYPE STANDARD TABLE OF REF TO OBJECT, 因此可插入指向任何对象实例的引用。

技术图片

Jerry这篇博客曾经介绍过该工具类的一个使用例子:

CL_OBJECT_COLLECTION, iterator and Polymorphism

假设我们要开发一个计算图形面积的应用,支持圆形和长方形。实现两个类ZCL_CIRCLE和ZCL_RECTANGLE, 分别按照圆形和长方形的面积计算公式,实现GET_AREA方法。

技术图片
技术图片

传统的实现方式

定义一个Table Line类型为通用的对象引用(TYPE REF TO OBJECT)的内表lt_shape,用于存放圆形和长方形的实例对象引用。

技术图片

每次创建圆形或者长方形的对象实例之后,添加到内表中,然后LOOP内表,逐行取出元素,用IS INSTANCE OF关键字,判断当前记录指向的是圆形还是长方形实例,再用CAST进行强制类型转换,调用对应的面积计算方法。

技术图片

这种实现方式,在LOOP里有IF ELSE判断,IS INSTANCE OF和CAST这三种非常丑陋的写法。将来如果要支持其他图形比如三角形的面积计算,又得在LOOP里添加新的ELSE分支,这违反了程序设计的开闭原则-对扩展开放,对修改封闭。

采用CL_OBJECT_COLLECTION的多态实现

定义一个新的接口ZIF_SHAPE,圆形和长方形的类均实现自这个接口:

技术图片
技术图片

借助CL_OBJECT_COLLECTION, 采取面向对象编程里多态(Polymorphism)的思路,我们不仅避免了丑陋的IF-ELSE,繁琐的类型探测IS INSTANCEOF和强制类型转换CAST,同时将代码行数从37行减少到了20行。将来要是得增加对其他图形的支持,只需要新建图形类并实现,而无需修改下面的计算逻辑。

技术图片

当然这个例子如果不用CL_OBJECT_COLLECTION, 而是每次把实现了ZIF_SHAPE接口的图形类实例,加入到TABLE LINE类型为TYPE REF TO OBJECT的内表里,然后直接LOOP内表,也可以达到同样的效果。本文只是为了演示CL_OBJECT_COLLECTION的用法,故而没有使用内表来完成计算。

感谢阅读。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":
技术图片

以上是关于谁能说明一下java里list这个类怎么用,要详细的主要内容,如果未能解决你的问题,请参考以下文章

java中int.Class和String.Class指啥,麻烦谁能详细解释一下。

java list 集合里可以存放list集合 吗?就是两重 List

java里如何根据类名(String)返回类

JAVA如何获取嵌套在静态LIST类中的静态LIST类

java 怎么将List里面数据排序

homebrew mac怎么安装,终端怎么用啊,完全看不懂网上的教程,谁能详细教一下,谢谢