在java中,hashmap是一种重要的数据结构,可以使各种任务更高效。当使用时,它们允许程序员将值关联为“键值对”,其中一个元素被用作“索引”,另一个元素则使用该索引进行检索。
在这里,我们将介绍hashmap是什么,如何使用它以及一些重要的方法。让我们开始吧!
hashmap在java中是什么?
上面的例子初始化了一个称为ages的hashmap,它将姓名映射到年龄。它演示了如何添加条目,根据键检索值,检查键是否存在于映射中以及删除条目。
©jingzhengli.com
简单地说,哈希映射是一种将键映射到值的数据结构。听起来并没有什么特别之处,但它的工作方式非常高效,即使对于大型数据集也是一个很好的解决方案。
在内部,使用一个数组,并对值进行哈希,将其转换为数组中的索引。哈希函数本质上将较长的字符串通过哈希过程转换为较短的字符串。但是,这些小细节对于实际使用它们并不重要。
要在java中使用hashmap,只需要调用hashmap类即可。让我们看看如何做到这一点。
如何在java中使用hashmap?
如果想在程序中使用hashmap,必须在java文件的顶部导入它。可以通过输入以下内容来实现:
import java.util.hashmap;
假设我们想将一个人的姓名与他们的年龄相关联。让我们创建一个hashmap,以字符串为键,以整数为值:
hashmap ages = new hashmap();
如果你以前没有见过,使用尖括号的语法在java中称为泛型。本质上,它允许你指定用于键和值的数据类型,但它们在许多其他地方也是常见的。
通过这样做,数据就不需要进行强制转换即可使用。请注意,这里不能使用基本类型,所以我们使用integer代替int。
现在,让我们向hashmap中添加一个值。可以使用put方法来实现:
ages.put("bob", 30);
如果我们以后想要检索该值,可以使用get方法:
int bobage = ages.get("bob");
还有一些其他操作。我们可以使用containskey检查一个键是否存在于hashmap中:
boolean hasbob = ages.containskey("bob");
我们还可以使用remove来删除一个键:
ages.remove("bob");
重要的方法
hashcode
在java中,hashmap的键可以指定为任何类,并且如前所述,它们根据其哈希值在数组中被转换为索引。然而,您可以指定如何计算该哈希值。例如,这里有一个表示人的类:
public class person {
private string name;
private int age;
public person(string name, int age) {
this.name = name;
this.age = age;
}
public string getname() {
return name;
}
public int getage() {
return age;
}
}
如果我们想手动计算一个人对象的哈希值,可以按照以下方式进行:
@override
public int hashcode() {
int result = name.hashcode() + age;
return result;
}
注意,由于hashcode和equals是object的方法,它们自动成为person的超类,所以最好使用@override。为了计算哈希值,我们使用了名字的哈希值,它是一个字符串并已经有了实现,然后我们简单地将人的年龄添加进去。
equals
虽然这离hashmap有些偏离,但如果我们提到hashcode,就很重要谈论一下equals方法。通常,如果我们想要比较两个值,我们可以简单地使用==操作符。然而,如果你这样做,它只会比较它们的内存地址,这通常不是我们想要的。
相反,我们可以实现类的equals方法。这定义了如何比较同一类的两个对象。下面是如何用person类实现这个方法:
@override
public boolean equals(object obj) {
if (this == obj) {
return true;
}
if (obj == null || getclass() != obj.getclass()) {
return false;
}
person person = (person) obj;
return age == person.age && name.equals(person.name);
}
在开始时,我们处理了一些边界情况。如果对象具有相同的内存地址,那么它们显然是相等的。然而,如果给定的对象为null,或者它们不属于同一类,它们不相等。之后,我们只需检查年龄和姓名是否相同,如果是,则返回true。
为什么我们要谈论这个呢?前面,我们谈到了重写hashcode方法,如果你要这样做,你应该同时实现equals方法,因为它们是密切相关的。
hashmap在java中:总结
虽然不总是必要的,但hashmap是基本结构,它可以极大地减少程序的复杂性。你可以学到更多关于它们的知识,这样做将提高你作为java开发人员的技能。