C # Java HashMap ekvivalentas

Remiantis „Java“ pasauliu C #, ar yra lygiavertis „HashMap“? Jei ne, ką rekomenduotumėte?

220
13 авг. nustatė John 13 rug. 2009-08-13 19:35 '09 19:35 2009-08-13 19:35
@ 7 atsakymai

Dictionary tikriausiai yra arčiausiai. System.Collections.Generic.Dictionary įgyvendina System.Collections.Generic.IDictionary sąsają (kuri yra panaši į „Java Map sąsają).

Kai kurie pastebimi skirtumai, kuriuos turėtumėte žinoti:

  • Pridėti / gauti elementus
    • „Java HashMap“ put ir nuskaito elementų nustatymo / priėmimo metodus
      • myMap.put(key, value)
      • MyObject value = myMap.get(key)
    • C # žodynas naudoja indeksavimą [] kad nustatytų / gautų elementus
      • myDictionary[key] = value
      • MyObject value = myDictionary[key]
  • null raktai
    • „Java HashMap leidžia naudoti nulinius mygtukus.
    • .NET Dictionary išmeta ArgumentNullException jei bandote pridėti nulinį raktą
  • Pridėti dublikato raktą
    • „Java HashMap “ pakeis esamą vertę nauju.
    • .NET Dictionary pakeis esamą vertę nauju, jei naudosite [] indeksavimą. Jei naudosite „ Add metodą, jis ArgumentException .
  • Bandykite gauti neegzistuojančio rakto
    • „Java HashMap “ grąžins nulį.
    • . NET Dictionary bus KeyNotFoundException . Jei TryGetValue to išvengti, galite naudoti „ TryGetValue vietoj indeksavimo [] :
      MyObject value = null; if (!myDictionary.TryGetValue(key, value)) { }

Dictionary turi „ ContainsKey metodą, kuris gali padėti išspręsti dvi ankstesnes problemas.

320
13 авг. Atsakymą pateikė Powerlord 13 rug . 2009-08-13 19:37 '09, 19:37 PM 2009-08-13 19:37

Nuo C #, lygiavertis Java HashMap

Man reikia žodyno, kuris patvirtino „nulinį“ raktą, tačiau atrodo, kad nėra gimtojo, todėl parašiau savo. Tiesą sakant, tai labai paprasta. Aš paveldėjau iš žodyno, pridėjau privatų lauką, kad išsaugotumėte „nulio“ klavišo reikšmes ir tada perrašiau indeksą. Taip atsitinka taip:

 public class NullableDictionnary : Dictionary<string, string> { string null_value; public StringDictionary this[string key] { get { if (key == null) { return null_value; } return base[key]; } set { if (key == null) { null_value = value; } else { base[key] = value; } } } } 

Tikimės, kad tai padės kažkas ateityje.

==========

Aš pakeitiau šį formatą.

 public class NullableDictionnary : Dictionary<string, object> 
33
31 янв. atsakymą pateikė KeithC sausio 31 d 2011-01-31 23:36 '11, 23:36, 2011-01-31 23:36

Patikrinkite MSDN dokumentaciją „ Hashtable“ klasei.

Atstovauja raktinių verčių porų, kurios yra suskirstytos pagal raktų maišos kodą, rinkinį.

Taip pat turėkite omenyje, kad tai nėra sriegis.

4
13 авг. atsakymą pateikė Ray 13 rug. 2009-08-13 19:40 '09, 07:40 pm 2009-08-13 19:40

Leiskite man padėti išsiaiškinti kodaddiko algoritmo pavyzdį.

C # ' žodynas yra < Hashmap in Java "lygiagrečioje visatoje.

Kai kurie įgyvendinimai yra skirtingi. Norėdami geriau suprasti, žr. Toliau pateiktą pavyzdį.

„Java HashMap“ deklaracija:

 Map<Integer, Integer> pairs = new HashMap<Integer, Integer>(); 

C # žodyno paskelbimas:

 Dictionary<int, int> Pairs = new Dictionary<int, int>(); 

Gauti vertę iš vietos:

 pairs.get(input[i]); // in Java Pairs[input[i]]; // in C# 

Vertės nustatymas vietoje:

 pairs.put(k - input[i], input[i]); // in Java Pairs[k - input[i]] = input[i]; // in C# 

Bendrasis pavyzdys gali būti pastebėtas pagal „Codaddict“ algoritmą.

„Java“ kodavimo algoritmas:

 import java.util.HashMap; public class ArrayPairSum { public static void printSumPairs(int[] input, int k) { Map<Integer, Integer> pairs = new HashMap<Integer, Integer>(); for (int i = 0; i < input.length; i++) { if (pairs.containsKey(input[i])) System.out.println(input[i] + ", " + pairs.get(input[i])); else pairs.put(k - input[i], input[i]); } } public static void main(String[] args) { int[] a = { 2, 45, 7, 3, 5, 1, 8, 9 }; printSumPairs(a, 10); } } 

Codaddict algoritmas C #

 using System; using System.Collections.Generic; class Program { static void checkPairs(int[] input, int k) { Dictionary<int, int> Pairs = new Dictionary<int, int>(); for (int i = 0; i < input.Length; i++) { if (Pairs.ContainsKey(input[i])) { Console.WriteLine(input[i] + ", " + Pairs[input[i]]); } else { Pairs[k - input[i]] = input[i]; } } } static void Main(string[] args) { int[] a = { 2, 45, 7, 3, 5, 1, 8, 9 }; //method : codaddict algorithm : O(n) checkPairs(a, 10); Console.Read(); } } 
3
23 июля '16 в 13:02 2016-07-23 13:02 atsakymą pateikė Ajay Yadiki liepos 23 d., 16 d., 13:02 2016-07-23 13:02

Manau, kad geriau pateikti pavyzdžių, kaip pasakyti vieną iš jūsų mėgstamiausių.
Taigi patikrinkite kolekcijas ir nuspręskite, kurią kolekciją norite naudoti.

1
13 дек. atsakymas duotas Ismoh 13 dec. 2014-12-13 19:08 '14, 19:08, 2014-12-13 19:08

Aš tik norėjau duoti du centus.
Tai atitinka „@Powerlord“ atsakymą.

Vietos „null“ vietoj nulinės eilutės.

 private static Dictionary<string, string> map = new Dictionary<string, string>(); public static void put(string key, string value) { if (value == null) value = "null"; map[key] = value; } public static string get(string key, string defaultValue) { try { return map[key]; } catch (KeyNotFoundException e) { return defaultValue; } } public static string get(string key) { return get(key, "null"); } 
0
14 нояб. Atsakymas pateikiamas ossobuko 14 nov. 2017-11-14 11:51 '17 at 11:51 2017-11-14 11:51

atsakymas

Žodynas

Pažvelkite į mano funkciją, jos paprasta pridėjimas naudoja svarbiausias nario funkcijas.

ši funkcija grąžina klaidą, jei sąraše yra dublikatų.

  public static bool HasDuplicates<T>(IList<T> items) { Dictionary<T, bool> mp = new Dictionary<T, bool>(); for (int i = 0; i < items.Count; i++) { if (mp.ContainsKey(items[i])) { return true; // has duplicates } mp.Add(items[i], true); } return false; // no duplicates } 
0
21 сент. Basheer AL-MOMANI atsakymas 21 rugsėjo. 2016-09-21 20:16 '16 at 20:16 2016-09-21 20:16

Kiti klausimai apie žymes arba Užduoti klausimą