2009-07-15 112 views
1

可以使用哪种泛型集合类提供映射和类似数组的功能。例如,我想将一个字符串映射到Double,并且我想使用该键作为索引来引用该值。Java - 集合选择

collection[key] = collection[key] + double 

Google集合库是否提供这样的功能?

谢谢。

回答

2

的Java不会让你使用与收藏括号语法,但你可以这样做:

HashMap<String, Double> collection = new HashMap<String, Double>(); 

String key = "some key"; 
... 

if(collection.containsKey(key)) 
{ 
    // increment the value 
    collection.put(key, collection.get(key) + 1.0); 
} 
else 
{ 
    // initialize the value 
    collection.put(key, 0.0); 
} 
+0

(如果有人在一年的时间内阅读这篇文章,JDK7可能对集合有'[]'语法。) – 2009-07-15 22:01:55

+0

谢谢汤姆,我不知道这是计划好的。如果我在Java 7出来时忘了回到它,希望有人会对此做出回应。 – 2009-07-15 23:52:17

1

我使用的java.util.HashMap的键值对,除非性能是一个问题,它几乎总是不是。

+0

的HashMap是关于你要碰到直接查找最高效的事。添加可能比链接列表稍慢。除非你受到严重的内存限制,否则除了索引到数组或ArrayList之外,在任何查找情况下都不会打破散列性能。 – 2009-07-15 21:00:46

2

你种得选择这里:-)可能是密钥是一个字符串:

Map<String, Double> myMap = new HashMap<String, Double>(); 
myMap.put("key1", 5.0); // caution - auto-wrap 
myMap.put("key1", myMap.get("key1") + 5.0); // caution - auto-wrap 

或它的一个int:

double[] myArray = new double[size]; 
int key1 = 1; 
myArray[key1] = 5.0; 
myArray[key1] += 5.0; 
1

我不明白你的例子如何使用数组类功能。你只是意味着重载数组索引操作符?如果是这样,你应该知道Java不允许操作符重载。

如果您确实需要数组操作,LinkedHashMap允许您执行键值查找,并跟踪值中的排序。这主要用于构建LRU缓存。

+0

我在c#模式下。数组索引操作符正是我所想的。 – javacavaj 2009-07-15 20:55:17

0

是啊,我想做同样的事情,而回,在这里我想代表数据库表中存在主键“查找”列的数据结构中。 HashMap本身不会这样做(据我所知)。

我想我做的是让我自己的数据结构包含多个数组映射的索引值的数据结构类。我想我可以创建一个RowData类并将每个rowdata存储在一个HashMap中。嗯。

别人可能可以解释得比我好得多。我只是一个初学者。

1

我能看到的最接近的是LinkedHashMap,它给出了元素的可预测顺序,但是这并不能给你一个给定索引的快速查找(它就像LinkedList那样)。它不会给你一个特定的方法来找到一个特定的索引,你将不得不添加自己的。

+0

是的,这个答案是票。继承人一个例子:http://www.java-examples.com/simple-java-linkedhashmap-example – djangofan 2009-07-15 21:29:39

0

你是指类似数组的功能或类似数组的语法。 Java不允许集合使用类似数组的语法,但是所有集合都具有某种形式的类似数组的功能。

如果你的意思是你想要存储对(键/值)并且能够通过索引访问它们(就像你是一个数组),那么就有一个带有你的名字的“LinkedHashMap”集合。

如果你的意思是你想在两个方向上进行索引(集合的任何一边都可能是一个键),那么你可能想要创建自己的包含两个散列映射的集合,并且每当一个对象被添加到你的集合,你将它添加到两个地图。