什么是键值对?

Red*_*ist 2 java key-value

我正在自学 Java,因此我可以编写 android 应用程序并遇到需要使用键值对,但不知道它是什么。

我感到困惑的是这与正常变量有何不同。假设 String 类型的变量指向一个对象或 int 变量指向 int 值。那个变量不是“键”,对象不是“值”吗?

Ste*_*n C 9

在最简单的层面上,键值对只是两个值,其中一个被指定为“键”,另一个被指定为“值”。

然而,在映射的上下文中谈论键值对更为常见,即从键映射到相应值的(数学)函数。根据此映射的属性,您可以限制键值对集。例如,对于 1 对 1 映射,您需要集合中的键是唯一的。


后续问题:

这和数组一样吗?

嗯……一个数组可以被认为是从一组索引(整数)到值的映射。但是映射更通用。而在 Java 中,数组还有其他属性可以将它们与Maps区分开来……而且它们有一个更简单、更快、内存占用更少的实现。

(请注意,在某些语言中,本身没有“数组”数据类型。相反,原语是“散列”或“关联数组”......这是一个更通用的映射。)

键总是字符串吗?

不可以。密钥可以是任何类型。(使用可变类型作为键通常是一个坏主意,特别是如果您的映射是使用MapJava 中的一种标准类型实现的。但是,即使在某些情况下也可以工作。)

假设 String 类型的变量指向一个对象或 int 变量指向 int 值。那个变量不是“键”,对象不是“值”吗?

不,或者至少,不是像 Java 这样的静态语言。键值对与变量绑定的区别在于“键”对象是数据,因此可以采用不同的值。相比之下,变量的名称在程序的源代码中是固定的:您不能在运行时更改它。

(在某些动态语言中,您可以(在运行时)动态创建新变量,对于此类语言,您可能会争辩说变量是表示范围的映射中的键值对……在程序执行的某个时刻。但是Java不是那样的......)


nem*_*035 6

键值对是两个值,通常以使用键访问值的方式连接。它们通常用于各种数据结构中,以提供对值的快速访问。hashtable data structure例如查看(在 Java 中,您可以查看HashMapHashtable

例如,假设我们有一个CartoonCharacter包含上述对的结构,例如:

兔八哥

这种键值关系类似于:

CartoonCharacter[lastName] = "Bunny";
Run Code Online (Sandbox Code Playgroud)

因此,如果您想获取该值,Bunny您可以通过 key 访问它lastName

key = "lastName"
value = CartoonCharacter.get(key)
print (value) // this would print "Bunny"
Run Code Online (Sandbox Code Playgroud)