2008-09-27 29 views
7

Tôi đã từng làm việc với PHP nhưng gần đây tôi đã làm việc với Java và tôi đang đau đầu cố gắng tìm ra điều này. Tôi muốn lưu biểu diễn này trong Java:Java: Mảng & Vectors

 
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"] 
         ) 
) 

Có cách nào sạch (tức là không có mã bẩn) để lưu điều này trong Java không? Chú thích; Tôi muốn sử dụng Strings làm chỉ mục mảng (trong thứ nguyên đầu tiên) và tôi không biết kích thước xác định của các mảng ..

Trả lời

12

Bạn có thể sử dụng một bản đồ và một danh sách (những cả hai đều là giao diện thực hiện trong nhiều cách để bạn chọn trường hợp phù hợp nhất trong trường hợp của bạn).

Để biết thêm thông tin, hãy xem hướng dẫn cho MapList và có thể bạn nên bắt đầu với hướng dẫn Collections.

Một ví dụ:

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

Bạn muốn có một Map, được chỉ định bởi bất kỳ thứ gì. HashMap s hoạt động trong hầu hết các trường hợp.

Điều gì đó tương tự.

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); 

Nếu bạn muốn đơn giản hơn, thư viện commons-langMultiMap.

15

Thử sử dụng Map<String, List<String>>. Điều này sẽ cho phép bạn sử dụng các chuỗi như các khóa/chỉ mục vào bản đồ bên ngoài và nhận được kết quả là một danh sách các chuỗi như các giá trị. Có thể bạn sẽ muốn sử dụng một số HashMap cho bản đồ ngoài và ArrayList cho các danh sách bên trong.

Nếu bạn muốn một số mã sạch đó là giống với PHP bạn đã khởi tạo nó, bạn có thể làm một cái gì đó như thế này:

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

Được cảnh báo trước rằng Vector là mã di sản cho các khuôn khổ Bộ sưu tập. Nó đồng bộ hóa quyền truy cập vào các yếu tố của nó làm chậm hiệu suất. Hầu hết các trường hợp sử dụng để sử dụng Danh sách không cần loại an toàn chủ đề này, và ngay cả khi bạn đã làm, tôi sẽ có xu hướng sử dụng CopyOnWriteArrayList.