2008-09-27 35 views
7

PHP ile çalışıyorum ama son zamanlarda Java ile çalışıyorum ve bunu çözmeye çalışırken başım ağrıyor. Java ile bu temsilini kaydetmek istiyorum: Java bu şeyi kurtarmak için temiz bir yolu (yani hiçbir kirli kod)Java: Diziler ve Vektörler

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

var mı? Not; Dizeleri dizin dizileri olarak kullanmak istiyorum (ilk boyutta) ve dizilerin belirli boyutlarını bilmiyorum ..

cevap

12

Bir Harita ve Listesi (uygulanan bu ikisi de arayüzleri kullanabilirsiniz Sizin durumunuzda en uygun olanı seçmek için birden fazla yolla).

Daha fazla bilgi için Map ve List derslerini kontrol edin ve belki de Collections eğiticisiyle başlamalısınız.

Bir örnek:

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, hemen her şey tarafından anahtarlanan istediğiniz. Çoğu durumda HashMap s çalışması.

Böyle bir şey. Bir şeyin daha basit istiyorsanız

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 kütüphanesi MultiMap sahiptir.

15

Map<String, List<String>> kullanmayı deneyin. Bu, Strings'i anahtarlar/indisler olarak dış haritaya kullanmanıza ve sonuçların Strings listesi olarak değerler almanıza olanak tanır. Dış harita için HashMap ve iç listeler için ArrayList 'lar kullanmak isteyeceksiniz. Eğer bunu başlatmak için verdi PHP benzer bazı temiz kod istiyorsanız

, böyle bir şey yapabilirsiniz:

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 Koleksiyonları çerçevesi için eski kodu olduğunu Forewarned. Erişimi, performansı yavaşlatan öğelere senkronize eder. Listeyi kullanmak için çoğu kullanım örneği, bu tür bir iplik güvenliğine ihtiyaç duymaz ve siz de olsa, CopyOnWriteArrayList'u kullanmaya daha eğilimliydim.