Што з'яўляецца выкарыстанне класа Pair і чаму укаранёным тут?

У чым розніца паміж Пара класа і HashMap . Я бачу, як з іх маюць ключ і значэнне .

Code Earlier:

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

Код быў зменены на гэта сёння.

<�Моцны> Зменены код

List> patientInfo = new ArrayList>();
patientInfo.add(new Pair("Religion", Constants.ReligionArray[custom.getReligion()]));
  1. Чаму яны рэалізавалі Пара класа тут? Што можа быць прычынай.
  2. У чым розніца паміж Пара класа і HashMap .

Заўвага: Як код працуе выдатна.

15
Чаму? Магчыма таму, што захоўваць усе пра пацыента ў адным аб'екце не з'яўляецца добрай ідэяй, для забеспячэння бяспекі і ў адваротным выпадку. Такім чынам, вы можаце абстрагавацца доступ да інфармацыі пацыентаў.
дададзена аўтар arynaq, крыніца
Я прымаю вы не ведаеце аб структуры дадзеных хэш-табліца, праўда?
дададзена аўтар acdcjunior, крыніца

7 адказы

Actually, your code has been changed away from typical Java approach into what is most often referred to as "object denial". The replacement that happened is from a dedicated domain object Patient into a generic Pair.

So you are asking about the difference between List> and a Map. The former contains more information because it maintains the insertion order of the individual pairs and also allows random access based on position in the list.

А Карта , з другога боку, дазваляе эфектыўна пошук на аснове ключа, які з'яўляецца тым, што сапраўды неабходна.

7
дададзена
  1. пара клас гэта проста структура з двума палямі, якія не маюць адмысловая назва (у адрозненне ад Person ). Пары (і ў больш агульным выпадку, картэжы) часта выкарыстоўваюцца ў такіх мовах, як Python, калі вы не хочаце, каб даць імя некаторай прамежкавай структуры. У вашым выпадку, замест (магчыма) пры пэўных Person аб'ект у вас ёсць просты цалкам пэўны аб'ект. Магчыма, выкарыстанне Пара сумніўная ў Java, абумоўлена даволі нязграбны сінтаксіс (у параўнанні з Python, дзе пара будзе проста ( «Рэлігія», рэлігій) ) .

  2. Вы можаце думаць аб Карта як сукупнасць пар з унікальным абмежаваннем на першы элемент.

7
дададзена

I think that the question you're asking is: what is the difference between List> and HashMap. There are many.

In general, a Map object is used to associate a value with a key and provide means to quickly get the values based on the key. There can usually be a single value associated with one key.

А List ўяўляе сабой спарадкаваны кантэйнер, у якім захоўваюцца аб'екты, дае сродкі для перабіраць яго змесціва і атрымаць элемент на аснове яго размяшчэнне ў спісе (атрымаць Nth элемента). Звычайна адны і тыя ж элементы могуць быць прадубляваныя ў спісе.

In your case, when you are using a list, your patients can have a several religions. To find what kind of religion your patient has, you have to manually search the list for the pair with the first element set to religion.

Had you used a map, each patient would have a single religion associated with him (or none). You could also find the religion quickly through Map.get(String key)

6
дададзена
@MarkoTopolnik гэта няшчасны прыклад, прабачце:/Але я думаю, захоўвання тэлефонных нумароў або іншых 1-многіх арганізацый магчымасць у «patientDetails».
дададзена аўтар Dariusz, крыніца
Мадэль, якая падтрымлівае некалькі рэлігій на чалавека --- якая цудоўная ідэя, каб навучыць сэнс <�я> перабудовы !
дададзена аўтар Marko Topolnik, крыніца
Я забыўся паставіць смайлік, прабачце :-) я пісаў, што для смеху.
дададзена аўтар Marko Topolnik, крыніца

Перш чым казаць пра розніцу паміж парай і HashMap, дазвольце мне сказаць вам, чаму гэта на самай справе не пытанне, які вы хочаце адказаў. Тое, што вы сапраўды хочаце ведаць, чаму вы б узяць аб'ект і разбіць яго ў спіс ключ/значэнне primitivies.

Код вы спасылаецеся, пераўтварэнне з аб'ектна-арыентаванага падыходу з выкарыстаннем класа Пацыент (які на самай справе выглядае, як ён павінен называцца PatientInfo ) у спіс прымітываў, яны essentialy "deObjectOrienting" клас.

Такім чынам, у сваёй мадэлі кожная пераменная класа становіцца пара , дзе імя зменнай становіцца ключом, а значэнне зменнай становіцца значэннем.

Вось пашыраны прыклад класа

// 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 religionInfo = new Pair("religion","myReligionName");
Pair addressInfo = new Pair("address","address of the patient");

Затым яны дадаюць іх альбо Пацыент або пара у спіс.

Навошта каму-то рабіць гэта добрае пытанне. Большасць людзей спрабуюць стаць больш аб'ектна-арыентаваным, як гэта робіць кадаваньне прасцей. Можа быць, так як гэта толькі адна зменная ў CLSS яны зразумелі, чаму не выдаліць клас цалкам?

Да першапачатковага пытанні паміж парай і HashMap. Пара проста ключ/значэнне. HashMap лепш з'яўляецца збор, як правіла, выкарыстоўваецца для захоўвання вялікай колькасці пар ключ/значэнне. Тут яны выкарыстоўваюць спіс, дзе яны, верагодна, варта з дапамогай HashMap.

4
дададзена

пара </а> клас можна параўнаць з карце. ўступленне з HashMap. HashMap можа ўтрымліваць некалькі пар ключ/значэнне захоўваецца і эфектыўна падняў вочы з дапамогай ключа.

Пералік пара не можа быць паглядзела ўверх ключ без перабору нерацыянальна (у залежнасці ад памеру), але можна спасылацца па індэксе. Там таксама няма нічога захавання адзін і толькі адзін ключ у спісе.

1
дададзена

А «пара» ёсць пара рэчаў, якія вы хочаце быць звязаныя тым ці іншым чынам. Там няма ключа органаў, спісы прадметаў або што-небудзь яшчэ. Гэта проста ярлык, калі ў вас ёсць пара рэчаў, якія сапраўды найбольш карысныя ў якасці пары элементаў, але досыць просты структурай, у якой няма неабходнасці ствараць асобны клас суадносіць іх. Прыклады: кропкі на прамавугольніку, IP-адрасы ў даменах і г.д.

HashMap лепш можна разглядаць як адлюстраванне пар, з выкананнем «ключ» спецыфікацыі. У гэтым выпадку першы элемент пары становіцца «пастаяннай» і выкарыстоўваецца для абазначэння другога пункта. У маім прыкладзе я выкарыстаў пар IP-адрасы для даменаў. У гэтым выпадку мы будзем выкарыстоўваць дамен у якасці «ключа» і выкарыстоўваць яго для абазначэння IP-адрас машыны. Гэты IP-адрас можа змяненне курсу, але дамен заўсёды будзе тое ж самае, і выкарыстоўваецца для хуткага пошуку адпаведнага IP-адрасы ў дадзены момант. Звярніце ўвагу, што абмежаванне першага элемента ў пары з'яўляецца «ключ» адбываецца з хэша-карты, а не спецыфікацыяй пары istelf. Хэш частка HashMap спасылаецца на тое, як элементы шукаюцца ў гэтым выпадку хэш-табліцу, на «першы» элемент у пары ...

0
дададзена

А Пара аб'ект захоўвае роўна адзін ключ і адзін значэнне. А HashMap гэта структура, у якой можна захоўваць некалькі пар ключ/значэнне.

0
дададзена
З дженеріков пару будзе мець сэнс.
дададзена аўтар Thorbjørn Ravn Andersen, крыніца
На самай справе, HashMap гэта Карта , а не Collection .
дададзена аўтар Genzer, крыніца
Пара не абавязкова складаецца з ключа і значэння. ён гэтак жа можа складацца з двух значэнняў. напрыклад думаць пра каардынаты ў 2D
дададзена аўтар Marco Forberg, крыніца
Вы маеце рацыю, я выправіў свой адказ.
дададзена аўтар eternay, крыніца