我用谷歌搜索了这个,但找不到令人满意的答案。 现在,我得到了一个包含多个这样的值的对象(取自数据库):
public class Student {
private String name;
private String vorname;
private int matrikelnummer;
private String studiengang;
private int author_id;
private int grp;
public Student(int mat, int tut_id, int author, String stud) {
setMatrikel(mat);
setGrp(tut_id);
setAuthor_id(author);
setStudiengang(stud);
}
}
创建了这些对象的数组,但我需要再次访问这些对象以进行进一步的数据库相关工作,所以我想到了使用hashmap(第一次)。要么为每个值创建一个hashmap,要么我使用已经创建的对象将数组槽作为关键但是如果我使用hashmap.get(someMatnumber),那么hashmap会自动遍历所有对象和包含的值吗?或者我有添加一些额外的代码?
感谢阅读。 :)
答案 0 :(得分:2)
您的问题很难理解。但是,如果我们脱离背景(某种程度上),可以回答这部分:
如果我使用hashmap.get(someMatnumber),hashmap会自动遍历所有对象和包含的值吗?还是我必须添加一些额外的代码?
如果您询问HashMap.get
方法内部是否遍历所有对象,则答案为"否"。如果我们假设非病理性密钥 1 ,则get
调用将查看非常少量的条目对象(键/值对)。在技术方面,它是O(1)
。
如果您询问是否可以使用(仅)HashMap.get
调用来迭代HashMap
中的键,值或键值对,而无需编写更多代码,那么答案就是答案是"不"。
如果您可以枚举所有可能的密钥(例如,您有一个单独的可能的列表),您可以这样做:
for (possibleKey K : allPossibleKeys) {
V value = map.get(possibleKey);
if (value != null) {
// we now know that possibleKey is present in the map
}
}
但这是1)编写额外的代码,2)可能效率低下。
迭代地图中的键的正常(有效)方法是使用键集:
for (key K : map.keySet()) {
...
}
请注意,我们根本不使用get
来迭代密钥。您可以以相同的方式迭代值集和条目集。
1 - 有几种病理情况。 1)如果地图中的大多数/所有键具有相同的哈希值,则在最坏的情况下,单个get
调用可能需要查看大多数/所有键。 2)如果哈希映射变得非常大(超过2 ^ 31个条目),那么地图就不能再扩展哈希数组,并且哈希链将开始增长。但是,平均链长可能大约为ceiling(size / 2^31))
,如果尺寸确实大,则只会出现问题。
答案 1 :(得分:1)
执行Map<String, Student> mydata = new HashMap<String, Student>();
并检索Student
班级mydata.get("student name you entered");
,这将返回学生对象
希望有所帮助
答案 2 :(得分:0)
听起来我觉得.get(#)
会移除它所获得的物品。它不是。要循环或遍历HashMap,只需执行以下操作:
for(HashMapKeyType var : hashmap.keyset()){
hashmap.get(var); //Get the value from hash map using the var.
}
答案 3 :(得分:-1)
地图模拟数学函数抽象。 hashmap实现不按地图顺序保证,并为基本操作提供恒定时间性能(get和put)