C # Java HashMap 동등
Java 세계에서 C #으로 오면 HashMap에 해당하는 것이 있습니까? 그렇지 않다면 무엇을 추천 하시겠습니까?
Dictionary
아마 가장 가까운 것입니다. 인터페이스를 System.Collections.Generic.Dictionary
구현합니다 System.Collections.Generic.IDictionary
(Java Map
인터페이스 와 유사 ).
주의해야 할 몇 가지 중요한 차이점은 다음과 같습니다.
- 아이템 추가 / 받기
- Java의 HashMap에는 항목을 설정 / 받기위한
put
및get
메소드가 있습니다.myMap.put(key, value)
MyObject value = myMap.get(key)
- C # 사전은
[]
항목 설정 / 가져 오기를 위해 인덱싱을 사용myDictionary[key] = value
MyObject value = myDictionary[key]
- Java의 HashMap에는 항목을 설정 / 받기위한
null
열쇠- Java
HashMap
는 null 키를 허용합니다 - .NET의는
Dictionary
를 던졌습니다ArgumentNullException
당신이 널 키를 추가하려고하면
- Java
- 중복 키 추가
- Java
HashMap
는 기존 값을 새로운 값으로 대체합니다. - 인덱싱
Dictionary
을 사용하는 경우 .NET 은 기존 값을 새 값으로[]
바꿉니다. 이Add
메소드 를 사용 하면 대신을 발생ArgumentException
시킵니다.
- Java
- 존재하지 않는 키를 얻으려고 시도
- Java
HashMap
는 null을 반환합니다. - .NET
Dictionary
은을 던질 것KeyNotFoundException
입니다. 이를 피하기 위해 인덱싱TryGetValue
대신 메소드를 사용할 수 있습니다[]
.
MyObject value = null; if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */ }
- Java
Dictionary
의 ContainsKey
두 가지 문제를 해결하는 데 도움 이되는 방법이 있습니다.
"널 (null)"키를 허용하는 사전이 필요했지만 기본 키가없는 것 같아서 직접 작성했습니다. 실제로는 매우 간단합니다. Dictionary에서 상속하고 "null"키 값을 보유하는 개인 필드를 추가 한 다음 인덱서를 덮어 썼습니다. 다음과 같이 진행됩니다.
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;
}
}
}
}
이것이 미래의 누군가를 돕기를 바랍니다.
==========
이 형식으로 수정했습니다
public class NullableDictionnary : Dictionary<string, object>
"codaddict 's algorithm"의 예를 통해 이해하도록 도와 드리겠습니다.
' C # 의 사전 '은 병렬 유니버스에서 'Java의 해시 맵 '입니다.
일부 구현은 다릅니다. 더 잘 이해하려면 아래 예를 참조하십시오.
Java HashMap 선언 :
Map<Integer, Integer> pairs = new HashMap<Integer, Integer>();
C # 사전 선언 :
Dictionary<int, int> Pairs = new Dictionary<int, int>();
위치에서 가치 얻기 :
pairs.get(input[i]); // in Java
Pairs[input[i]]; // in C#
위치에서 값 설정 :
pairs.put(k - input[i], input[i]); // in Java
Pairs[k - input[i]] = input[i]; // in C#
Codaddict의 알고리즘 아래에서 전반적인 예를 볼 수 있습니다.
자바에서 codaddict의 알고리즘 :
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);
}
}
C #의 Codaddict 알고리즘
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's algorithm : O(n)
checkPairs(a, 10);
Console.Read();
}
}
Hashtable 클래스 에 대한 MSDN 설명서를 확인하십시오 .
키의 해시 코드를 기반으로 구성된 키-값 쌍의 모음을 나타냅니다.
또한 이것은 스레드 안전하지 않습니다.
사전 사용-해시 테이블을 사용하지만 유형 안전합니다.
또한 Java 코드
int a = map.get(key);
//continue with your logic
다음과 같이 C #으로 가장 잘 코딩됩니다.
int a;
if(dict.TryGetValue(key, out a)){
//continue with your logic
}
이런 식으로 블록 내부에 변수 "a"의 범위를 지정할 수 있으며 나중에 필요할 경우 블록 외부에서 여전히 액세스 할 수 있습니다.
정답은
사전
내 함수를 살펴보십시오. 간단한 추가는 사전 내에서 가장 중요한 멤버 함수를 사용합니다.
이 함수는 목록에 중복 항목이 포함되어 있으면 false를 반환합니다.
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
}
나는 단지 2 센트를주고 싶었다.
이것은 @Powerlord의 답변에 따릅니다.
널 문자열 대신 "널"을 넣습니다 .
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");
}
참고 URL : https://stackoverflow.com/questions/1273139/c-sharp-java-hashmap-equivalent
'Programing' 카테고리의 다른 글
물음표와 도트 연산자는 무엇입니까? (0) | 2020.03.16 |
---|---|
루비 STDIN의 모범 사례? (0) | 2020.03.16 |
C ++에서 도트 (.) 연산자와->의 차이점은 무엇입니까? (0) | 2020.03.16 |
단일 곱셈으로 비트 추출 (0) | 2020.03.16 |
Windows Form 라디오 버튼을 그룹화하려면 어떻게합니까? (0) | 2020.03.16 |