Java - 集合选择

时间:2009-07-15 20:28:22

标签: java collections

我可以使用哪种泛型集合类提供映射和类似数组的功能。例如,我想将一个String映射到一个Double,我想使用key作为索引来引用该值。

collection[key] = collection[key] + double

Google集合库是否提供此类功能?

感谢。

9 个答案:

答案 0 :(得分:4)

答案 1 :(得分: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;

答案 2 :(得分: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 );
}

答案 3 :(得分:1)

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

答案 4 :(得分:1)

我没看到你的例子如何使用类似数组的功能。你只是意味着重载数组索引运算符?如果是这样,您应该知道Java不允许运算符重载。

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

答案 5 :(得分:1)

我能看到的最接近的是LinkedHashMap,它为您提供了可预测的元素顺序,但这并不能让您快速查找给定的索引(它有点像LinkedList那样)。并且它没有为您提供通过特定索引查找的特定方法,您必须添加自己的方法。

答案 6 :(得分:0)

是的,我想在前一段时间做同样的事情,我想在数据结构中代表一个数据库表,其中有一个主键“查找”列。 HashMap本身不会这样做(据我所知)。

我认为我所做的是制作我自己的数据结构类,其中包含由索引值映射的多个数组。我想我可以创建一个RowData类并将每个rowdata存储在HashMap中。 HMM。

其他人可能比我更好解释。我只是一个初学者。

答案 7 :(得分:0)

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

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

如果您想要在两个方向上进行索引(集合的任一侧可能是一个键),那么您可能想要创建包含两个哈希映射的自己的集合,并且每次将对象添加到集合中时,你把它添加到两个地图。

答案 8 :(得分:0)

Google Collections有一个Multiset,它将每个键与一个整数相关联。

http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Multiset.html