8

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

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

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

4

6 回答 6

16

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

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值是唯一的并且您想将它们视为键,那么 aMap将按照其他人的建议工作。

于 2012-12-06T07:00:35.600 回答
15

我认为如果你的值是唯一的,你应该使用HashMapwithint作为键和值。Stringint

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

请注意,作为Map集合,Java 集合不存储原始类型int,它们存储对象,因此您必须为您的值使用Integer包装类。int

参考这个链接为什么 Java Collections 不能直接存储 Primitives 类型?

于 2012-12-06T06:59:28.990 回答
6

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

List<Pair> mPairs = new ArrayList<Pair>();

Pair pair = new Pair(123,"your string");
mPairs.add(pair);

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

于 2012-12-06T07:01:49.147 回答
1

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

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

IdentityHashMap - 为每个 OBJECT 使用本地 hashCode 实现,因此您不需要唯一的 ID,但您必须通过 operator 'new' 创建所有整数,并且不要使用自动装箱,因为有一些缓存机制

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

更新 对于非唯一键,您可以使用某种多映射: Map> map

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

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

例如,您可以使用 HashMap。

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

于 2012-12-06T07:28:26.753 回答
0

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

于 2012-12-06T06:59:19.253 回答
0

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

我认为如果你使用Map<Integer,String>wherekey(Integer)将是指向String价值的索引会更好。

Map<Integer,String> map = new HashMap<Integer,String>();
map.put(1,"str1");
map.put(2,"str2");
...
于 2012-12-06T06:59:27.537 回答