【问题标题】:How to take input of own datatypes in Java? [closed]如何在 Java 中输入自己的数据类型? [关闭]
【发布时间】:2021-02-14 04:35:44
【问题描述】:

我想在输入数量不固定的数组中获取输入。

输入如下

3
3 ab ab bd
2 ab na
5 ab bl jhg fhd djbj

我提供了一个示例输入,输入与问题中的类似。

首先提供的输入数为 3。

然后每一行可能有 I 个输入,即前 3 个输入字符串、第二个 2 个输入字符串和第三个 5 个输入字符串。 请帮助我如何存储输入。

【问题讨论】:

  • List<List<String>> 会做到的。
  • 使用 BufferedReader 读取每一行。然后你可以使用 String#split() 创建一个 String[] 与你的空格分隔的行。

标签: java arraylist input


【解决方案1】:

我认为这个问题是基于一个误解。

如果您要将数据放入ArrayList(或大多数其他List 类),您无需告诉列表它有多大。您只需调用add 将每个元素添加到列表中。 ArrayList 实现负责调整大小1。这也适用于列表列表。

话虽如此,如果你真的需要N元素分配空间的ArrayList2,方法是像这样构造它这个:

ArrayList<Something> list = new ArrayList<>(N);

(请注意,这是设置 容量 而不是列表的大小。列表将返回 0 作为列表的大小...直到您添加元素。)

从输入文件组装列表的方法是使用嵌套循环。外部循环填充外部列表。内部循环读取由列表元素组成的行并填充内部列表。


另一方面...如果您正在构建一个数组或数组数组,那么每个组件数组都必须以正确的大小创建,因为数组无法调整大小。


1 - 在某些情况下,告诉列表它可能包含多少元素会更有效。但在大多数情况下,性能差异没有实际差异。 提防过早的优化!
2 - 请注意,如果您的大小估计不正确,则设置不正确的容量实际上可能对空间利用率和性能有害。

【讨论】:

    【解决方案2】:

    使用列表列表。

    ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
    list.add(new ArrayList<String>());
    list.get(0).add("Hello");
    list.get(0).add("Me is");
    list.get(0).add("Ded");
    
    list.add(new ArrayList<String>());
    list.get(1).add("Eh");
    

    第一个元素有 3 个元素,第二个元素有 1 个。

    【讨论】:

      猜你喜欢
      • 2015-09-30
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      相关资源
      最近更新 更多