我希望能够在不使用集合的情况下将值与某些键相关联。我知道HashMaps,但我正在尝试探索一种更基本的方法来实现它。
例如,如果我要计算文件中每个单词的频率,我会将单词作为键和频率作为值。
某些语言也允许使用值访问数组。例如,Lua。
我还希望能够以其值访问每个键。
有两个相同大小的数组
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];
}
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);
}
}
如果你需要存储一些Pairs,那么使用Java类Pair
呢?这真的很直接:
new Pair<String, String>("key", "value").getValue();
还有班级AbstractMap.SimpleEntry
更多关于:
不要重新发明轮子!
创建一个包装类来处理:
public class MyKeyValueClass {
public String key;
public String value;
public MyKeyValueClass(String key, String value) {
this.key = key;
this.value = value;
}
}
那是一个基类。