Pair Class有什么用?为什么要在这里实现?

时间:2013-06-03 13:07:36

标签: java

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
  3. 之间有什么区别

    注意:两个代码都完美无缺。

7 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:7)

  1. Pair类只是一个包含两个字段的结构,没有特殊名称(与Person不同)。当您不想为某些中间结构命名时,Pairs(以及更一般地说,元组)通常用于Python等语言中。在您的情况下,您可以使用一个简单的完全定义的对象,而不是(可能)定义不足的Person对象。也许,Pair的使用在Java中是有问题的,因为语法相当笨拙(与Python相比,这对只是("Religion", religions))。

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

答案 2 :(得分:6)

我认为你问的问题是:有什么区别 List<Pair<T,S>>HashMap<T,S>。有很多。

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

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

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

如果您使用了地图,每个患者都会有一个与他相关的宗教信仰(或者没有)。您也可以通过Map<String,String>.get(String key)

快速找到宗教信仰

答案 3 :(得分:5)

在我谈论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是通常用于存储许多键/值对的集合。他们在这里使用List,他们可能应该使用HashMap。

答案 4 :(得分:1)

Pair对象只存储一个键和一个值。 HashMap是一种可以存储多个键/值对的结构。

答案 5 :(得分:1)

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

按键列表无法通过密钥查找而不会低效迭代(取决于大小),但可以通过索引引用它。在列表中也没有强制执行一个且只有一个键。

答案 6 :(得分:0)

“对”是您希望以某种方式相关的一对项目。没有关键的执行,项目列表或其他任何东西。它只是一个快捷方式,当你有一对作为一对项目真正最有用的项目,但结构简单,不需要创建一个单独的类来关联它们。示例:矩形上的点,域的IP地址等。

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