如何在不使用HashMap或任何其他集合的情况下在Java中存储键值对?

问题描述 投票:2回答:4

我希望能够在不使用集合的情况下将值与某些键相关联。我知道HashMaps,但我正在尝试探索一种更基本的方法来实现它。

例如,如果我要计算文件中每个单词的频率,我会将单词作为键和频率作为值。

某些语言也允许使用值访问数组。例如,Lua。

我还希望能够以其值访问每个键。

java keyvaluepair
4个回答
3
投票

有两个相同大小的数组

String [] keys = new String [5];
String [] values = new String [5];

keys [0] = "name";
values [0] = "Fred";

String getValue (String key) {

   // loop around keys array to get index of key

   return values [index];
}

3
投票

HashMap是基本的。

使用两个并行阵列效率极低。对于您读入的每个单词,您需要搜索keys数组,找到存储单词的索引,然后转到values数组中的相同位置,并将该位置的值增加1。

使用2D数组也没有意义,因为您试图存储String字和int计数频率,它们是不同的数据类型。

如果您计算某些数字出现在文档中的次数,那么您可以轻松地使用单个数组,但如果您在计算字符串数量则不行。

在您的情况下,HashMap确实是用于跟踪数据的理想数据结构。除非要求不使用集合,否则我建议至少尝试使用HashMap。

Scanner file = new Scanner(new File("filename.txt"));
Map<String, Integer> map = new HashMap<String, Integer>();
while (file.hasNext()) {
    String key = file.next();
    Integer value = map.get(key);
    if (value == null) {
        map.put(key, 1);
    }
    else {
        map.put(key, ++value);
    }
}

1
投票

如果你需要存储一些Pairs,那么使用Java类Pair呢?这真的很直接:

new Pair<String, String>("key", "value").getValue();

还有班级AbstractMap.SimpleEntry

更多关于:

不要重新发明轮子!


-1
投票

创建一个包装类来处理:

public class MyKeyValueClass {
    public String key;
    public String value;

    public MyKeyValueClass(String key, String value) {
        this.key = key;
        this.value = value;
    }
}

那是一个基类。

© www.soinside.com 2019 - 2024. All rights reserved.