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

时间:2015-04-27 04:38:15

标签: java keyvaluepair

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

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

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

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

5 个答案:

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

答案 1 :(得分:3)

HashMap IS basic。

使用两个并行阵列效率极低。对于您读入的每个单词,您需要搜索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);
    }
}

答案 2 :(得分:1)

如果您需要存储一些对,那么使用Java类Pair怎么办?真的很简单:

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

还有一个类AbstractMap.SimpleEntry

更多信息:

不要重新发明轮子!

答案 3 :(得分:0)

这可能是一个很好的面试问题,访问员希望了解一种无需使用HashMap或任何其他集合即可实现键值对的方法。

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

{% extends 'template.html' %}
{% block page %}
<div class="container">
   {% for post in posts %} <!-- iterate all posts keys/values -->
      <div class="row">
         <div class="col-md-6"> <h3>{{ post1.title }}</h3> </div>
         <div class="col-md-6"> <h3>{{ post2.title}}</h3> </div>
      </div>
  {% endfor %}
</div>  
{% endblock %}

或者可以使用类,基类如下:-

        <link href="https://fonts.googleapis.com/css?family=Literata&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>

答案 4 :(得分:-1)

创建一个包装类来处理:

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

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

这是一个基类。