我希望能够在不使用集合的情况下将值与某些键相关联。我知道HashMaps,但我正在尝试探索一种更基本的方法来实现它。
例如,如果我要计算文件中每个单词的频率,我会将单词作为键和频率作为值。
某些语言也允许使用值访问数组。例如,Lua。
我还希望能够以其值访问每个键。
答案 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;
}
}
这是一个基类。