18

和有什么区别Pair Class and a HashMap。我看到他们两个都有key and value

之前的代码:

 List<Patient> patientDetails = new ArrayList<Patient>();
 Patient patientInfo = new Patient();
 patientInfo.setReligion(Constants.ReligionArray[custom.getReligion()]);
 patientDetails.add(patientInfo);

代码已更改为今天。

更改代码

List<Pair<String, String>> patientInfo = new ArrayList<Pair<String, String>>();
patientInfo.add(new Pair<String, String>("Religion", Constants.ReligionArray[custom.getReligion()]));
  1. 为什么他们实施了Pair Class here?可能是什么原因。
  2. 和有什么区别Pair Class and a HashMap

注意:这两个代码都可以完美运行。

4

7 回答 7

12

List<Pair<T,S>>我认为您要问的问题是:和之间有什么区别 HashMap<T,S>。有许多。

通常Map对象用于将值与键相关联,并提供基于键快速获取值的方法。通常可以有一个值与一个键相关联。

AList是存储对象的有序容器,提供了迭代其内容并根据其在列表中的位置获取元素的方法(获取第 N 个元素)。通常,相同的元素可能会在列表中重复。

在您的情况下,当您使用列表时,您的患者可以有多种宗教信仰。要查找您的患者的宗教信仰类型,您必须手动在列表中搜索第一个元素设置为宗教的对。

如果您使用地图,每个患者都会有一个与他相关的单一宗教(或没有)。您也可以通过以下方式快速找到宗教Map<String,String>.get(String key)

于 2013-06-12T10:10:35.883 回答
10

实际上,您的代码已从典型的 Java 方法更改为最常称为“对象拒绝”的方法。发生的替换是从专用域对象Patient到通用Pair<String, String>.

所以你问的是List<Pair<String,String>>和 a之间的区别Map<String,String>。前者包含更多信息,因为它维护了各个对的插入顺序,并且还允许基于列表中的位置进行随机访问。

另一方面, AMap允许基于键进行有效查找,这是真正需要的。

于 2013-06-03T13:22:31.397 回答
8
  1. 该类Pair只是具有两个字段的结构,没有特殊名称(与 不同Person)。当您不想为某些中间结构命名时,通常会在 Python 等语言中使用对(更一般地说,元组)。在您的情况下,您有一个简单的完全定义的对象,而不是(可能)Person未定义的对象。也许,Pair在 Java 中的用法是有问题的,因为语法相当笨拙(与 Python 相比,这对只是("Religion", religions))。

  2. 您可以将其Map视为对第一个元素具有唯一约束的对的集合。

于 2013-06-03T13:27:01.083 回答
7

在我谈论 Pair 和 HashMap 之间的区别之前,让我告诉你为什么这不是你想要回答的问题。你真正想知道的是你为什么要把一个对象分解成一个键/值原语列表。

您引用的代码正在从使用类的面向对象方法Patient(实际上看起来应该调用它PatientInfo)转换为原语列表,它们本质上是“deObjectOrienting”类。

所以在他们的模型中,每个类变量都变成了一个Pair变量名成为键,变量值成为值的地方。

这是一个扩展的示例类

// Old style (Object oriented)
class PatientInfo{
    String religion;
    String address;
}
PatientInfo patientInfo = new PatientInfo();
patientInfo.setReligion("myReligionName"); 
patientInfo.setAddress("address of the patient"); 

// New Style, key/value primitive pairs (very not object oriented)
Pair<String,String> religionInfo = new Pair<String,String>("religion","myReligionName");
Pair<String,String> addressInfo = new Pair<String,String>("address","address of the patient");

然后他们将这些添加PatientPair列表中。

为什么有人会这样做是一个很好的问题。大多数人试图变得更加面向对象,因为它使编码更容易。也许因为它只是 Clss 中的一个变量,他们想为什么不完全删除这个类?

对于 Pair 和 HashMap 之间的原始问题。一对只是一个键/值。HashMap 是通常用于存储许多键/值对的集合。在这里,他们使用了一个列表,他们可能应该使用 HashMap。

于 2013-06-13T02:44:04.017 回答
2

可以将Pair类与HashMap的Map.Entry进行比较。一个 HashMap 可能包含多个键/值对,通过键有效地存储和查找。

如果不进行低效迭代(取决于大小),则无法通过键查找对列表,但可以通过索引引用它。列表中也没有强制执行一个且只有一个键。

于 2013-06-17T18:36:31.297 回答
1

一个Pair对象只存储一个键和一个值。AHashMap是一种结构,您可以在其中存储多个键/值对。

于 2013-06-03T13:12:18.320 回答
0

“对”是您希望以某种方式关联的一对项目。没有关键的执行,物品清单或其他任何东西。当您拥有一对作为一对项目最有用的项目时,它只是一种快捷方式,但结构足够简单,无需创建单独的类来关联它们。示例:矩形上的点、域的 IP 地址等。

哈希映射可以被认为是对的映射,具有“密钥”规范的强制执行。在这种情况下,该对的第一项变为“常量”并用于引用第二项。在我的配对示例中,我将 IP 地址用于域。在这种情况下,我们将使用域作为“密钥”并使用它来引用机器的 IP 地址。这个 IP 地址当然可以改变,但域总是相同的,用于快速查找当前关联的 IP 地址。请注意,对中第一项作为“键”的限制来自哈希映射,而不是对 istelf 的规范。然后 hashmap 的哈希部分指的是如何在对中的“第一个”项目上查找项目,在这种情况下是哈希表......

于 2013-06-03T13:18:12.180 回答