【问题标题】:How to initialize a two column arraylist?如何初始化一个两列数组列表?
【发布时间】:2012-11-24 04:14:17
【问题描述】:

我需要创建一个记录两列 {int, String} 的列表。我认为 ArrayList 是我需要的,但我无法理解它。我从数据库中提取了字符串,int 是我以后需要识别字符串位置的索引值。

List<List<String>> strArray = ArrayList<List<String>>;

那么我可以为从数据库中提取的每一行执行类似 strArray.add().add() 的操作吗?

【问题讨论】:

  • 如果 id 是唯一的,则使用 hashmap HashMap 否则创建一个列表可以容纳的新类

标签: java android arraylist


【解决方案1】:

如果您的 ID 不是唯一的,您仍然可以使用 Map:

Map<Integer, String> map = new IdentityHashMap<Integer, String>();
map.put(new Integer(1), "string");

IdentityHashMap - 为每个 OBJECT 使用本地 hashCode 实现,因此您不需要唯一的 ID,但您必须通过运算符“new”创建所有整数,并且不要使用自动装箱,因为有一些 cache mechanism

还有 JVM 参数,它控制缓存大小'-XX:AutoBoxCacheMax='。 但是使用这个参数你不能禁用缓存,如果你将大小设置为零,那么缓存将忽略它并使用默认值:[-128; 127]。 这个参数只针对Integers,Long没有这种参数。

更新 同样对于非唯一键,您可以使用某种多图: 地图>地图

并使用非唯一键将您的值存储在其中:

map.put(1, new ArrayList<String>());
map.get(1).add("value1");
map.get(1).add("value2");

例如,您可以使用 HashMap。

您还可以在 google-collections: 'guava' 中找到 MultiMap 实现。

【讨论】:

    【解决方案2】:

    如果您的int 值是唯一的,我认为您应该使用HashMapint 作为键和String 作为值。

    Map<Integer,String> myMap = new HashMap<Integer,String>();
    myMap.put(1,"ABC");
    

    请注意,Map 是一个集合,Java 集合不像 int 那样存储原语,它们存储对象,因此您必须为您的 int 值使用 Integer 包装类。

    参考此链接Why can Java Collections not directly store Primitives types?

    【讨论】:

    • 我之前并不真正了解 HashMap,但我认为我不应该使用它,谢谢!!
    【解决方案3】:

    如果您只需要两个值,您可以使用本机 Pair

    List<Pair> mPairs = new ArrayList<Pair>();
    
    Pair pair = new Pair(123,"your string");
    mPairs.add(pair);
    

    如果您的 int 值不是唯一的,因此您不能使用 HashMap,这将是一个不错的决定

    【讨论】:

      【解决方案4】:

      另一种方法是制作自定义对象:

      Class CustomObject {
          int value1;
          String value2;
      
          CustomObject(int v1, String v2) {
              value1 = v1;
              value2 = v2;
          }
      }
      

      然后使用它:

      List<CustomObject> myList = new ArrayList<CustomObject>();
      CustomObject o1 = new CustomObject(1, "one");
      myList.add(o1);
      // etc.
      

      如果 int 值是唯一的并且您想将它们视为键,那么 Map 将按照其他人的建议工作。

      【讨论】:

        【解决方案5】:

        Map 是将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射到一个值。

        我认为最好使用Map&lt;Integer,String&gt;,其中key(Integer) 是指向String 值的索引。

        Map<Integer,String> map = new HashMap<Integer,String>();
        map.put(1,"str1");
        map.put(2,"str2");
        ...
        

        【讨论】:

        • 使用稀疏数组进行整数字符串组合。
        【解决方案6】:

        我认为你可以将 int 和 string 包装在一个类中,然后将类对象放入 List。

        【讨论】:

          猜你喜欢
          • 2011-06-05
          • 2015-07-22
          • 2012-08-03
          • 2023-03-14
          • 2016-03-08
          • 1970-01-01
          • 1970-01-01
          • 2018-11-21
          • 2023-03-13
          相关资源
          最近更新 更多