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

How to store key value pairs in Java without using HashMap or any other collection?

我希望能够在不使用集合的情况下将值关联到某些键。我知道 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.

使用二维数组也没有意义,因为您要存储的是字符串字和整数计数频率,而它们是不同的数据类型。

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

对于您的情况,HashMap 确实是用于跟踪数据的理想数据结构。除非要求不使用 Collections,否则我建议至少尝试使用 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);
    }
}

创建一个包装器 class 来处理:

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

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

那是一个基地class。

如果你需要存储一些Pairs,使用Java class Pair怎么样?这真的很简单:

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

还有classAbstractMap.SimpleEntry

更多信息:

不要重新发明轮子!

这可能是一个很好的面试问题,面试官想知道一种在不使用 HashMap 或任何其他集合的情况下实现键值对的方法。

在这里,我存储了字符串中所有字符的频率

static void countFrequencies(String str) 
{
  int n = str.length(); //here we are storing frequencies of all characters in string
  int[] count = new int[MAX_CHAR];

  for (int i = 0; i < n; i++)
    count[str.charAt(i) - 'a']++;
}

或者可以使用 classes,基础 class 看起来像:-

class Key { 
      int freq; // store frequency of character 
      char ch; 
      Key(int val, char c)  
      { 
          freq = val;  
          ch = c; 
      } 
}