2012-05-01 36 views
12

Tôi cần thứ gì đó giống như 3 chiều (như danh sách hoặc bản đồ), mà tôi điền bằng 2 Chuỗi và một số nguyên trong vòng lặp. Nhưng, thật không may tôi không biết cấu trúc dữ liệu nào sẽ sử dụng và cách thức.Danh sách 3 chiều hoặc Bản đồ

// something like a 3-dimensional myData 
for (int i = 0; i < 10; i++) { 
    myData.add("abc", "def", 123); 
} 
+0

Mối quan hệ giữa ba giá trị là gì? – Attila

+0

Chúng đến từ JTextFields và JButtons. – user1170330

+0

Ok, nhưng bạn có muốn _do_ với họ không? – Attila

Trả lời

18

Tạo một đối tượng mà gói gọn ba với nhau và thêm chúng vào một mảng hoặc liệt kê:

public class Foo { 
    private String s1; 
    private String s2; 
    private int v3; 
    // ctors, getters, etc. 
} 

List<Foo> foos = new ArrayList<Foo>(); 
for (int i = 0; i < 10; ++i) { 
    foos.add(new Foo("abc", "def", 123); 
} 

Nếu bạn muốn chèn vào một cơ sở dữ liệu , viết một lớp DAO:

public interface FooDao { 
    void save(Foo foo);  
} 

Triển khai khi cần bằng JDBC.

+0

Tôi cần một lớp "container" tương tự để lưu trữ chính xác ba thuộc tính. Tôi khởi tạo các thuộc tính đó thông qua hàm tạo và tôi cần có quyền truy cập vào mọi thuộc tính riêng biệt. Lớp không có bất kỳ logic nào trong đó, chỉ ba thuộc tính đó và một hàm tạo. Cách tốt nhất để truy cập các thuộc tính đó là gì? Trong trường hợp này, thiết lập các thuộc tính là công cộng được không, hoặc tôi nên viết getters? Các thuộc tính là cuối cùng. – kazy

+1

OK? Ai sẽ ngăn cản bạn?Đặt chúng thành công khai; chúng không thay đổi theo cách đó. Mong đợi cảnh sát OO đến gõ cửa. – duffymo

+0

Tôi hỏi có ổn không vì tôi không muốn viết mã gì đó chống lại các khái niệm OO. Từ câu trả lời của bạn, tôi giả định rằng các thuộc tính cuối cùng không yêu cầu getters, vì chúng không thể thay đổi được? Hoặc là "công chúng cuối cùng" chỉ được chấp nhận trong trường hợp vụ kiện nhỏ này? – kazy

2

Đơn giản chỉ cần tạo ra một lớp

class Data{ 
    String first; 
    String second; 
    int number; 
} 
1

Câu trả lời tùy thuộc vào mối quan hệ giữa các giá trị.

1) bạn chỉ muốn lưu trữ cả ba thứ tự theo thứ tự khi chúng đến: tạo một lớp tùy chỉnh bao gồm cả ba phần tử và thêm một thể hiện của lớp này vào List<MyData>.

2) bạn muốn kết hợp chuỗi sirst với dữ liệu thứ hai và thứ ba (và kết hợp thứ hai với int): tạo Map> và thêm các phần tử vào nó (bạn sẽ phải tạo bản đồ bên trong) cho mỗi chuỗi đầu tiên mới)

3) bạn không muốn giữ bản sao, nhưng bạn không muốn/cần bản đồ .: Tạo loại tùy chỉnh (a'la 1)) và đặt chúng trong Set<MyData>

3) mix-and trận đấu

9

đang Guava Một của Google sẽ trông như thế này:

import com.google.common.collect.Table; 
import com.google.common.collect.HashBasedTable; 

Table<String, String, Integer> table = HashBasedTable.create(); 

for (int i = 0; i < 10; i++) { 
    table.put("abc", "def", i); 
} 

Mã trên sẽ xây dựng một HashMap bên trong một HashMap với một constructor trông như thế này:

Table<String, String, Integer> table = Tables.newCustomTable(
     Maps.<String, Map<String, Integer>>newHashMap(), 
     new Supplier<Map<String, Integer>>() { 
    @Override 
    public Map<String, Integer> get() { 
     return Maps.newHashMap(); 
    } 
}); 

Trong trường hợp bạn muốn ghi đè lên các cấu trúc cơ bản bạn có thể dễ dàng thay đổi nó.

-1

Bạn có thể sử dụng mã này!

public class List3D { 

    public static class MyList { 
     String a = null; 
     String b = null; 
     String c = null; 

     MyList(String a, String b, String c) { 
      this.a = a; 
      this.b = b; 
      this.c = c; 
     } 
    } 

    public static void main(String[] args) { 

     List<MyList> myLists = new ArrayList<>(); 
     myLists.add(new MyList("anshul0", "is", "good")); 
     myLists.add(new MyList("anshul1", "is", "good")); 
     myLists.add(new MyList("anshul2", "is", "good")); 
     myLists.add(new MyList("anshul3", "is", "good")); 
     myLists.add(new MyList("anshul4", "is", "good")); 
     myLists.add(new MyList("anshul5", "is", "good")); 

     for (MyList myLista : myLists) 
      System.out.println(myLista.a + myLista.b + myLista.c); 
    } 
} 
Các vấn đề liên quan