为什么字符串是Java中流行的HashMap键?

128 阅读2分钟

为什么字符串是Java中流行的HashMap键?

有很多情况下,数据被存储为键值对。在Java中,它可以通过**"map "**实现,它是一个集合。键通常不应该是空的,它们应该只指向一个值。在Map中,有各种可用的类,其中。 哈希玛是一个实现了Map接口的类。

Hashmap是基于Hashtable的。它可以允许空值和空键。

  • 最重要的是,键应该是唯一的,有了这个唯一的键,我们就可以快速检索到值了。
  • 首先,让我们看一个使用Hashmap存储和显示数据的例子,然后会看到为什么在Java中String是一个流行的hashmap键!

让我们来存储一些包含手机号码的人的数据。

Java

// HashMap is available in util package
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
// Scanner is needed to get inputs and
// it is also in util package
import java.util.Scanner;
public class StringHashMapExample {
	public static void main(String args[])
	{
		HashMap<String, Long> hashMapOfUsers
			= new HashMap<String, Long>();
		System.out.println(
			"How many person details containing phone"
			"numbers are going to get stored: ");
		Scanner scanner = new Scanner(System.in);
		int phoneNumber = scanner.nextInt();
		for (int i = 0; i < phoneNumber; i++) {
			System.out.println(
				"Enter User Name [key (String)]: ");
			String key = scanner.next();
			System.out.println(
				"Enter Phone Number [value (Long)]: ");
			long value = scanner.nextLong();

			// Let us store key values as
			// lower case
			hashMapOfUsers.put(key.toLowerCase(), value);
		}
		System.out.println(
			"Get the details of users . . . . . .");
		Iterator hmIterator
			= hashMapOfUsers.entrySet().iterator();

		// Iterating through Hashmap
		while (hmIterator.hasNext()) {
			Map.Entry hashMapElement
				= (Map.Entry)hmIterator.next();

			// Printing mark corresponding
			// to string entries
			System.out.println(hashMapElement.getKey()
							+ " : "
							+ hashMapElement.getValue());
		}

		System.out.println(
			"Enter a name to search in the hashmap(key): ");
		String reqKey = scanner.next();

		// To avoid case mismatch of user names,
		// it is converted to lower case
		System.out.println(
			"Phone number (value): "
			+ hashMapOfUsers.get(reqKey.toLowerCase()));
	}
}

输出。

为什么 "字符串 "是Java中流行的HashMap键?

1.HashMap

  • 当我们使用HashMap存储 数据时,会计算出给定键的哈希代码,例如,我们在上面的例子中给出了2个键,对它们来说。
  • HashMap 被计算出来,它的值被放置在键的哈希码结果所代表的位置。
  • 同样,在获取数据的时候,哈希码也被计算出来,通过这种方式,哈希码所代表的位置上的值被检索出来。总是通过检查两个哈希码是否相等,来检索值。
  • 除了字符串,如果我们使用任何其他数据类型并试图改变值和键,存储的哈希值(在存储时间)和检索的哈希值(在获取时间)肯定会有所不同,因此我们无法检索到适当的值。

2.2. 不可变性。

  • 字符串是不可变的。在字符串创建后,我们不能修改它的值。这是主要的优势。即哈希码在存储和检索时保持不变。因此,在哈希图中使用字符串变量来保存键值是一种流行的方法。
  • 哈希码被缓存,不需要再次计算(因为字符串是不可变的)。
  • 不变性是一个很好的机制,每次都能为一个键对象获得相同的哈希代码。因此,总是选择String是最理想的,它可以解决内存泄漏、值不可用等问题。
  • 当数据存储在HashMap中时,hashCode()和equals()方法就会发挥作用。字符串因为其不可变性为其提供了最大的支持。