【问题标题】:java-how to manage multiple lists of data- in a single variable- with easy access to each listjava-如何在单个变量中管理多个数据列表-轻松访问每个列表
【发布时间】:2012-08-31 17:15:51
【问题描述】:

我有一个场景,我必须在 Java 应用程序中处理多个数据列表... 现在每个列表中都可以包含任意数量的元素...此外,这些列表的数量最初也是未知的...

哪种方法最适合我的情况?我可以想到列表的arraylist,或者列表的列表或arraylist的列表等(即arraylist + list/arraylist+arraylist/list+list的组合)......我想知道的是--

(1) 上述哪个(或您自己的解决方案)最容易管理 - 即存储/获取数据 (2) 以上哪个将使用最少的内存?

【问题讨论】:

  • List 是一个接口,ArrayList 是一个实现。 List vs ArrayList 作为比较没有任何意义。您使用 List 作为引用类型,除非您需要特定于 ArrayList 的方法。

标签: java list multidimensional-array arraylist


【解决方案1】:

我将我的变量声明为:

List<List<DataType>> lists = new ArrayList<List<DataType>>();

通过接口类型的变量访问列表方法会稍有时间损失,但我认为,这完全可以与您根据需要更改类型的灵活性相平衡。 (例如,如果您决定使lists 不可变,您可以通过java.util.Collections 中的一种方法来实现,但如果您将其声明为ArrayList&lt;List&lt;DataType&gt;&gt;,则不能。)

请注意,lists 必须保存一些实现 List&lt;DataType&gt; 的具体类的实例,因为(正如其他人所指出的)List 是一个接口,而不是一个类。

【讨论】:

    【解决方案2】:

    List 是一个接口。 ArrayListList 的一种实现。

    当您构造List 时,您必须选择特定的具体类型(例如ArrayList)。当您使用列表时,如果可能的话,最好针对界面进行编程。这可以防止您的代码与特定的 List 实现之间的紧密耦合,让您以后可以更轻松地更改为另一个 List 实现(如果您愿意)。

    【讨论】:

    • 我同意针对接口编程通常更好。但是,值得注意的是,在大多数 VM 中,与声明具体类型相比,访问声明为 List 的对象的方法会带来轻微的性能损失。
    【解决方案3】:

    如果您知道确定要处理的列表的方法,请使用列表映射。

    Map<String,List<?>> = new HashMap<String,List<?>>();
    

    这样您就可以避免遍历外部元素才能到达实际列表。哈希映射比迭代器执行得更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 2019-10-27
      • 2016-07-16
      相关资源
      最近更新 更多