2008-09-27 3 views
7

저는 PHP로 익숙해졌지만 요즘 저는 Java로 작업 해 왔으며이를 파악하려고 애쓰는 중이에요. 이 표현을 Java로 저장하고 싶습니다.Java : 배열 및 벡터

 
Array ( 
     ["col_name_1"] => Array ( 
           1 => ["col_value_1"], 
           2 => ["col_value_2"], 
           ... , 
           n => ["col_value_n"] 
         ), 
     ["col_name_n"] => Array ( 
           1 => ["col_value_1"], 
           2 => ["col_value_2"], 
           ... , 
           n => ["col_value_n"] 
         ) 
) 

Java에서이 것을 저장하는 깨끗한 방법 (즉, 더러운 코드 없음)이 있습니까? 노트; 문자열을 배열 인덱스 (첫 번째 차원에서)로 사용하고 싶습니다. 배열의 크기가 확실하지 않습니다.

답변

12

당신은지도 목록 (구현이 모두 인터페이스를 사용할 수 있습니다 귀하의 경우 가장 적절한 것을 선택하는 한 가지 이상의 방법으로).

자세한 내용은 MapList에 대한 자습서를 확인하고 Collections 자습서부터 시작해야합니다.

예 :

import java.util.*; 

public class Foo { 
    public static void main(String[] args) { 
     Map<String, List<String>> m = new HashMap<String, List<String>>(); 
     List<String> l = new LinkedList<String>(); 
     l.add("col_value_1"); 
     l.add("col_value_2"); 
     //and so on 
     m.put("col_name_1",l); //repeat for the rest of the colnames 

     //then, to get it you do 

     List<String> rl = m.get("col_name_1"); 

    } 
} 
5

당신은 Map을 원할 것입니다. HashMap 대부분의 경우 작동합니다.

이와 비슷한 것. 당신이 뭔가 간단합니다

List<String> col1Vals = new java.util.ArrayList<String>(); 
col1Vals.add("col_value_1"); 
col1Vals.add("col_value_2"); 
Map<String, List<String>> map = new HashMap<String, List<String>>(); 
map.put("col_name_1", col1Vals); 

commons-lang 라이브러리는 MultiMap 있습니다.

15

Map<String, List<String>>을 사용해보세요. 이렇게하면 Strings를 외부 맵의 키/인덱스로 사용할 수 있으며 결과를 값의 String 목록으로 가져올 수 있습니다. 아마도 바깥 쪽지도에는 HashMap을 사용하고 안쪽 목록에는 ArrayList을 사용하고 싶을 것입니다. 당신은 당신이 그것을 초기화 준 PHP와 유사하다 깨끗한 약간의 코드를 원하는 경우

, 당신은 같은 것을 할 수 있습니다

Map<String, List<String>> columns = new HashMap<String, List<String>>() {{ 
    put("col_name_1", Arrays.asList("col_val_1", "col_val_2", "col_val_n")); 
    put("col_name_2", Arrays.asList("col_val_1", "col_val_2", "col_val_n")); 
    put("col_name_n", Arrays.asList("col_val_1", "col_val_2", "col_val_n")); 
}}; 
2

Vector이 컬렉션 프레임 워크에 대한 기존의 코드 미리 양해하십시오. 요소에 대한 액세스를 동기화하여 성능을 저하시킵니다. List를 사용하는 대부분의 유스 케이스는 이런 종류의 스레드 안전성을 필요로하지 않으며, 그렇더라도 CopyOnWriteArrayList을 더 사용하려고합니다.