2013-04-28 3 views
0

String 값을 쌍으로 만들고 데이터 구조로 전달하는 방법이 필요합니다. 어떤 추천? Map이 효과가 있습니까? Map과 관련된 문제는 모든 문자열이이 컨텍스트에서 페어링되지는 않지만 일부 문자열 만 페어링된다는 것입니다. 나는 모든 문자열을 가질 필요가 있고, 존재한다면 그것은 문자열 쌍이다. 명확하지 않은 것이 있으면 알려주세요.문자열 값을 쌍으로 만드는 최적의 방법 java

+0

문자열의 쌍 또는 하나의 문자열 인 요소 목록을 원하십니까? – hyde

+0

네, 그게 내가 원하는거야. – John

답변

1

Map은 쌍이없는 문자열에 대해 특별한 값을 사용할 수 있습니다.

+0

나는 이런 식으로 생각했다. 그러나 더 좋은 방법이 있는지 궁금해하고 있었다. – John

+1

대부분의 맵 구현은 null 값을 허용하며 키의 존재 여부를 확인하는 데 사용할 수있는 메소드가 있습니다. –

1

음, 아마도 이것이 최선의 방법은 아니지만, 때때로 내가 사용하는 것은 파이썬의 튜플과 비슷한 양면 형 구조입니다.

class Duplex<T,T> { 
private T item1, item2; 
public Duplex(T one){ 
    item1 = one; 
} 
public Duplex(T one, T two){ 
    item1 = one; 
    item2 = two; 
} 
//Getters + Accessors 
} 

제네릭 할 필요가 없습니다, 그러나 당신이 다른 상황을 다시 사용할 수 있습니다 :

나는과 같이 일반적인 구조를 구축 할 수 있습니다.

이전에는지도를 사용하지 않았으므로 사실 더 좋을 수도 있습니다.

+0

자바 맵은 python dict와 같습니다. – Woot4Moo

+0

아, 맞아. 나는 대개 관련 값 쌍을 반환하기 위해 위의 Duplex 구조를 사용합니다. –

+0

@ Woot4Moo 더 정확하게 말하자면, 파이썬'dict'은 자바'HashMap'과 (더 많거나 적게) 동일하다고 생각합니다. Java 표준 라이브러리에는 다른'Map' 구현체가 많이 있으며, Apache Commons와 Guava와 같은 것들이 더 있습니다. – hyde

0

지도는 원하는 키 값 쌍을 제공합니다.

class MyPair 
{ 
    String first; 
    String second; 
    // Equals and Hashcode 
} 

는 이제가 당신에게 당신의 MyPair 클래스의 내부 파라미터를 결정 : 당신은 무엇을 할 수 있습니다하면이 같은 것입니다.
지도 쌍 = 새로운 HashMap();

0

대부분의 요소가 하나의 문자열이 될 것이므로 쌍을 문자열로 바꾸는 것이 좋습니다.

+0

쌍이 많으면이 솔루션으로 성능을 관리하십시오. 연결과 분할은 비용이 많이 듭니다. – Thierry

+0

배열이나 개별 필드에 문자열을 저장하는 것이 더 쉽고 빠르지 않습니까?이 솔루션은 아무런 의미가 없습니다. –

+0

소비 된 메모리는 배열이나 클래스에서 두 개의 문자열을 래핑하는 것보다 적습니다. 더 많은 정보가 없으면 나는 무엇이 최선인지 말할 수 없다. –

0

하나의 직접적인 방법은 배열을 사용하는 것입니다. 여기

List<String[]> pairs = new ArrayList<String[]>(); 

...

pairs.add(new String[]{"first", "second"}); 
pairs.add(new String[]{"pairless"}); 

또는 당신이 원하는대로 용기 사용, List 그냥 예입니다, 포인트는 String[]입니다.

참고 : 일반 배열을 사용하면 일종의 "빠르고 더러워진"맞춤 "페어"클래스를 만드는 것이 더 적절합니다. 특히 당신이 sigle 쌍을 다루는 메소드를 가지고 있다면, 그것을 포함 할 클래스를 만드는 것이 합리적입니다. 이 클래스에서는 여전히이 종류의 배열을 내부적으로 사용하여 1 또는 2 (또는 다른 개수의) 항목을 저장할 수 있습니다.

+0

페어 클래스와 문자열을 하나의 컬렉션에서 가져 와서 개별적으로 처리하는 방법은 어떻게됩니까? – John

+0

@Anonymous 그 질문이 무슨 의미인지 모르겠다.하지만 일반적으로 Java에서는 "함께 가져 오는"다양한 유형이이를 수행하는 클래스를 작성함으로써 수행된다. – hyde

관련 문제