【问题标题】:Java: Arrays & VectorsJava:数组和向量
【发布时间】:2010-09-13 18:07:05
【问题描述】:

我习惯于使用 PHP,但最近我一直在使用 Java,试图弄清楚这一点让我很头疼。我想用 Java 保存这个表示:

大批 ( ["col_name_1"] => 数组 ( 1 => [“col_value_1”], 2 => ["col_value_2"], ... , n => [“col_value_n”] ), ["col_name_n"] => 数组 ( 1 => [“col_value_1”], 2 => ["col_value_2"], ... , n => [“col_value_n”] ) )

有没有一种干净的方法(即没有脏代码)在 Java 中保存这个东西?笔记;我想使用字符串作为数组索引(在第一维中),我不知道数组的确定大小..

【问题讨论】:

    标签: java arrays data-structures hashmap


    【解决方案1】:

    请注意,Vector 是 Collections 框架的遗留代码。它同步对其元素的访问,这会降低性能。大多数使用 List 的用例不需要这种线程安全,即使你这样做了,我也会更倾向于使用CopyOnWriteArrayList

    【讨论】:

      【解决方案2】:

      尝试使用Map<String, List<String>>。这将允许您使用字符串作为外部映射的键/索引,并获得作为值的字符串列表的结果。您可能希望将HashMap 用于外部地图,将ArrayList 用于内部列表。

      如果您想要一些类似于您提供的 PHP 的干净代码来初始化它,您可以执行以下操作:

      Map<String, List<String>> columns = new HashMap<String, List<String>>() {{
          put("col_name_1", Arrays.asList("col_val_1", "col_val_2", "col_val_n"));
          put("col_name_2", Arrays.asList("col_val_1", "col_val_2", "col_val_n"));
          put("col_name_n", Arrays.asList("col_val_1", "col_val_2", "col_val_n"));
      }};
      

      【讨论】:

        【解决方案3】:

        您可以使用 Map 和 List (这两种接口都以不止一种方式实现,您可以根据自己的情况选择最合适的方式)。

        有关更多信息,请查看 MapList 的教程,也许您应该从 Collections 教程开始。

        一个例子:

        import java.util.*;
        
        public class Foo {
            public static void main(String[] args) {
                Map<String, List<String>> m = new HashMap<String, List<String>>();
                List<String> l = new LinkedList<String>();
                l.add("col_value_1");
                l.add("col_value_2");
                //and so on
                m.put("col_name_1",l); //repeat for the rest of the colnames
        
               //then, to get it you do
        
               List<String> rl = m.get("col_name_1");
        
            }
        }
        

        【讨论】:

          【解决方案4】:

          你想要一个Map,它几乎可以被任何东西键入。 HashMaps 在大多数情况下都有效。

          类似的东西。

          List<String> col1Vals = new java.util.ArrayList<String>();
          col1Vals.add("col_value_1");
          col1Vals.add("col_value_2");
          Map<String, List<String>> map = new HashMap<String, List<String>>();
          map.put("col_name_1", col1Vals);
          

          如果您想要更简单的东西,commons-lang 库有一个 MultiMap

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-09-02
            • 2015-05-13
            • 2012-05-26
            • 1970-01-01
            • 2016-05-31
            • 2011-04-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多