2009-10-08 3 views
3

PHP의 연관 배열처럼 키를 값에 매핑 할 수있는 데이터 구조가 필요합니다. 각 키는 한 번만 존재할 수 있지만 값은 임의의 수의 키에 매핑 될 수 있습니다. 내가 뭘 찾고있어? Google Commons Collections에있는 것이 있습니까?Java : PHP의 연관 배열을 모방하기 위해 사용할 데이터 구조는 무엇입니까?

+0

이 질문은 비슷한 것을 이야기합니다. http://stackoverflow.com/questions/4993366/does-java-support-associative-arrays/12640402#12640402 –

답변

7

Map 구조가 원하는 것입니다. 좋은 구현은 HashMap입니다.

이 데이터 유형은 키에 대해 동일한 값을 허용하지 않지만 원하는만큼 중복 값을 가질 수 있습니다.

사용 예제 : 즉

Map<String, String> map = new HashMap<String, String>(); 
map.put("FirstName", "LastName"); 

System.out.println(map.get("FirstName")); // Prints 'LastName' 
System.out.println(map.put("FirstName", "Foo")); // Prints 'LastName' 
System.out.println(map.get("FirstName")); // Prints 'Foo' 

는 키를 한 번만 존재할 수 있습니다. 그렇지 않으면 값을 덮어 씁니다.

+0

내가 틀릴 수도 있지만 키가 같은 객체를 가리 키기를 원합니다. – Bostone

+2

아니요, 'Map '은 그가 원하는 것입니다. 키는 한 번만 존재할 수 있지만 값은 임의의 수의 키에 매핑 될 수 있습니다. 그래서''(Foo "=> foo,"Bar "=> bar,"Baz "= foo)'의 경우,"Foo "와"Baz "키는 유일하지만, 같은 값 foo . –

+0

Aaa - 그게 아닌가요? 여러 개의 키 - 동일한 값을가집니다. 동일한 참조를 여러 번 붙이면 HashMap에서 얻을 수 있습니다. – Bostone

4

HashMap<K,V>과 같이 HashMap을 찾고 있습니다. 전자는 Objects to Objects를 매핑하고 후자는 다른 유형을 매핑합니다.

+1

PHP 배열은 삽입 순서를 유지합니다. HashMap은 그렇지 않습니다. – cletus

+1

좋은 지적이지만 그는 단지 연관 속성을 요구 했으므로 나는 그가 그 특질에 대해 걱정하지 않는다고 생각합니다. –

+4

@cletus : 그럼'LinkedHashMap'이 있습니다. :-P –

0

일반 HashMap의 문제점은 무엇입니까? 값이 String 인 경우 참조 카운팅을 무료로받을 수 있습니다. 객체의 특정 인스턴스를 참조해야하지만 기존 참조를 사용하지 않고 기존 참조를 사용합니다.

+0

참조 카운팅? 그 점이나 그것이 관리되는 언어로 어떻게 영향을 미치는지 더 자세히 설명 할 수 있습니까? –

+1

-1 : 참조 횟수에 대한 문장이 완전히 잘못되었습니다. 괜찮은 JVM은 문자열이나 다른 "정상적인"데이터 구조의 메모리 관리에 참조 카운팅을 사용하지 않습니다. –

+0

'String a = "A"; 문자열 b = "A"; if (a == b && a.equals (b)) System.out.println (1); else System.out.println (0); ' 컴파일러가 배치하는 실제 메커니즘은 무차별 대입력 RC가 아니라고 가정합니다. 내가 말한 전부는 HashMap에서 여러 개의 String 키가 동일한 String 값으로 매핑된다는 것입니다 자바에서는 문자열이 특별한 방법으로 다루어지기 때문에 특별한 것을 할 필요가 없다. – Bostone

0

HashMap은 확실한 방법입니다. 실제로 PHP로 코딩을 시작했을 때 실제로 다른 방향으로 보입니다. 궁금 해서요, 어떻게 HashMap을 구현합니까? 그런 다음 연관 배열을 발견했습니다.

관련 문제