in

HashMap在Java中:你需要知道的

在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;
    }

注意,由于hashcodeequalsobject的方法,它们自动成为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开发人员的技能。

Written by