当前位置: 首页 > 面试题库 >

如何在Java中从ArrayList中切出ArrayList?

邵星河
2023-03-14
问题内容

如何ArrayList在Java中获取一个数组切片?具体来说,我想做这样的事情:

ArrayList<Integer> inputA = input.subList(0, input.size()/2);
// where 'input' is a prepouplated ArrayList<Integer>

因此,我希望这可以正常工作,但是Java返回List-,因此不兼容。而且当我尝试投射它时,Java不会让我这么做。我需要ArrayList-该怎么办?


问题答案:

在Java中,优良作法是在API中使用接口类型而不是具体的类。

您的问题是您正在使用ArrayList(可能在很多地方)应该使用的地方List。结果,您为自己创建了问题,并不必要地限制了列表为ArrayList

这是您的代码应如下所示:

List input = new ArrayList(...);

public void doSomething(List input) {
   List inputA = input.subList(0, input.size()/2);
   ...
}

this.doSomething(input);

您为问题建议的“解决方案”是/是:

new ArrayList(input.subList(0, input.size()/2))

可以通过复制子列表来实现。这不是正常意义上的切面。此外,如果子列表很大,那么制作副本将很昂贵。

如果您受到 无法更改 的API的约束,因此 必须将其 声明inputA为an
ArrayList,则可以实现的自定义子类,ArrayList其中该subList方法将返回的子类ArrayList。然而:

  1. 设计,实施和测试将需要大量工作。
  2. 现在,您已经在代码库中添加了重要的新类,可能与类的未记录方面(因此“可能更改”)相关ArrayList
  3. 您需要在代码库中创建ArrayList实例的地方更改相关位置,以创建子类的实例。

“复制数组”解决方案更加实用……请记住,这些不是真实的切片。



 类似资料:
  • 但是我们不能在集合中存储HashMap。我想要HashMap与键,值对作为返回值,这将被添加到列表中。也就是说,最终的值应该采用ArrayList>格式。 你能在这方面帮助我吗?谢了。

  • 这段代码运行良好,但我想知道它的性能,我指的是它的总体时间复杂度?

  • 问题内容: 我有一些数据存储为。当我要备份此数据时,java会永远绑定两个对象。这意味着当我更改数据值时,此更改将备份。我试图将数据中的值分别复制到循环中的备份中,试图使用方法-没有任何帮助。 问题答案: 我认为您需要针对单个对象。克隆不是“深入”;它只会克隆对对象的引用。

  • 我想要一个数组列表,并限制元素删除。我该怎么做?

  • 问题内容: 我看到了一个问题:从数组创建ArrayList 但是,当我使用以下代码尝试该解决方案时,它并不能在所有情况下都有效: 我在这里做错了什么?代码不应该编译就好吗? 问题答案: 问题在 是,被认为是一个单一的,因为基本数组从延伸实例。如果你有这样的工作,而不是因为现在你要发送的数组。 根据您的评论:如果您仍然想使用一个(或另一个原始类型的数组)作为主要数据,那么您需要使用wrapper类创

  • 问题内容: 我有一个包含一些对象的对象,例如,每个对象都有一个and 属性。如何从其中仅删除具有特定“名称” 的对象? 问题答案: 您可以使用如下形式: