【问题标题】:What is a Key-Value Pair? [closed]什么是键值对? [关闭]
【发布时间】:2014-09-21 04:20:07
【问题描述】:

我正在自学 Java,这样我就可以编写 android 应用程序,并且遇到了使用键值对的需求,但不知道它是什么。

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

【问题讨论】:

  • 你的教程是怎么说的?
  • 互联网搜索说明了什么?从字面上看,数百万点击!
  • 一个键值对是两个链接的数据项:一个键,它是某些数据项的唯一标识符,值,它是被识别的数据或指向该数据的位置。一次点击就说明了一切
  • 它是一个由键和值组成的对。没什么神秘的。
  • 阅读the Java Tutorials: Collections,具体来说,阅读Maps

标签: java key-value


【解决方案1】:

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

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


后续问题:

这和数组一样吗?

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

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

键总是字符串吗?

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    这个键值关系看起来像:

    CartoonCharacter[lastName] = "Bunny";
    

    因此,如果您想获得值Bunny,您可以通过密钥lastName 访问它。

    key = "lastName"
    value = CartoonCharacter.get(key)
    print (value) // this would print "Bunny"
    

    【讨论】:

    • 这让我现在更清楚了。但是,这和数组一样吗?
    • 数组是值的索引。地图是价值的关键
    • 所以不同之处在于,在键值对中我可以定义指向每个值的点,而在数组中我不能(它必须是某个索引号)?键总是字符串吗?
    • 好吧,您可以定义 Map 中哪些键指向哪个值,但您也可以在数组中执行此操作(使用索引)。但是,在 Map 中几乎任何对象都可以作为键,而在数组中,只有整数可以作为索引
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 2022-12-05
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多