Java-集合选择

Java-集合选择,java,collections,Java,Collections,我可以使用哪个泛型集合类来提供映射和类似数组的功能。例如,我想将一个字符串映射到一个Double,并且我想使用键作为索引引用该值 collection[key] = collection[key] + double 谷歌收藏库提供了这样的功能吗 谢谢。HashMap应该满足您的目的: HashMap应该满足您的目的: 我使用java.util.HashMap作为键值对,除非性能是一个问题,而这几乎总是不成问题。我使用java.util.HashMap作为键值对,除非性能是一个问题,而这几乎总是

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

collection[key] = collection[key] + double
谷歌收藏库提供了这样的功能吗


谢谢。

HashMap应该满足您的目的:


HashMap应该满足您的目的:


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

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

您必须在这里选择:-)您的键是一个字符串:

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

您必须在这里选择:-)您的键可以是字符串:

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

我看不出您的示例如何使用类似数组的功能。你的意思是重载数组索引操作符吗?如果是这样,您应该知道Java不允许运算符重载


如果您确实需要数组操作,LinkedHashMap允许您进行键值查找,以及跟踪值内的顺序。这对于构建LRU缓存非常有用

我不知道您的示例如何使用类似数组的功能。你的意思是重载数组索引操作符吗?如果是这样,您应该知道Java不允许运算符重载


如果您确实需要数组操作,LinkedHashMap允许您进行键值查找,以及跟踪值内的顺序。这对于构建LRU缓存非常有用

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 );
}
HashMap集合=新建HashMap();
String key=“some key”;
...
if(集合容器(键))
{
//增值
collection.put(key,collection.get(key)+1.0);
}
其他的
{
//初始化值
集合。放置(键,0.0);
}

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 );
}
HashMap集合=新建HashMap();
String key=“some key”;
...
if(集合容器(键))
{
//增值
collection.put(key,collection.get(key)+1.0);
}
其他的
{
//初始化值
集合。放置(键,0.0);
}

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

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


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

是的,我不久前也想做同样的事情,我想在数据结构中表示一个数据库表,其中有一个主键“lookup”列。HashMap本身不会这样做(据我所知)

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


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

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

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

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

如果您的意思是希望存储对(键/值),并能够使用索引(就像数组一样)访问它们,那么就有一个“LinkedHashMap”集合,上面有您的名字


如果您的意思是希望在两个方向上建立索引(集合的任意一侧都可以是键),那么您可能希望创建自己的集合,其中包含两个哈希映射,并且每次将对象添加到集合中时,您都会将其添加到两个映射中。

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

如果您的意思是希望存储对(键/值),并能够使用索引(就像数组一样)访问它们,那么就有一个“LinkedHashMap”集合,上面有您的名字


如果您的意思是希望在两个方向上建立索引(集合的任意一侧都可以是键),那么您可能希望创建自己的集合,其中包含两个哈希映射,并且每次将对象添加到集合中时,您都会将其添加到两个映射中。

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


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


我当时处于c#模式。数组索引运算符正是我所想的。我当时处于c#模式。数组索引运算符正是我所想的。HashMap是直接查找时遇到的性能最好的东西。添加速度可能比链表稍慢。除非内存严重受限,否则在任何查找情况下,除了数组或ArrayList中的索引外,在性能上都无法与哈希相比。HashMap是直接查找时遇到的性能最高的东西。