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()]));
Pair Class here?
可能是什么原因。Pair Class and a HashMap
。注意:两个代码都完美无缺。
答案 0 :(得分:8)
实际上,您的代码已经从典型的Java方法转变为最常被称为“对象拒绝”的方法。发生的替换是从专用域对象Patient
到通用Pair<String, String>
。
所以你问的是List<Pair<String,String>>
和Map<String,String>
之间的区别。前者包含更多信息,因为它维护各对的插入顺序,并且还允许基于列表中的位置进行随机访问。
另一方面,Map
允许基于密钥进行有效查找,这是真正需要的。
答案 1 :(得分:7)
Pair
类只是一个包含两个字段的结构,没有特殊名称(与Person
不同)。当您不想为某些中间结构命名时,Pairs(以及更一般地说,元组)通常用于Python等语言中。在您的情况下,您可以使用一个简单的完全定义的对象,而不是(可能)定义不足的Person
对象。也许,Pair
的使用在Java中是有问题的,因为语法相当笨拙(与Python相比,这对只是("Religion", religions)
)。
您可以将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");
然后,他们会将Patient
或Pair
添加到列表中。
为什么有人这样做是个好问题。大多数人都试图变得更加面向对象,因为它使编码更容易。也许因为它只是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的哈希部分引用如何查找项目,在这种情况下是哈希表,在对中的“第一个”项目中...