2011-01-24 44 views
22

Lớp nào sẽ hoạt động tốt nhất cho một danh sách các cặp không được sắp xếp? Tôi sẽ dùng một cặp (float, short) và sẽ cần để có thể thực hiện toán đơn giản (như nhân cặp với nhau để trả về một phao đơn, vv). Danh sách chỉ mất một đối số, và HashMap sẽ không cho phép các bản sao (theo như tôi biết). Có suy nghĩ gì không?Tạo danh sách các cặp trong java

Trả lời

37

Bạn có thể sử dụng lớp Entry<U,V> rằng HashMap sử dụng nhưng bạn sẽ bị mắc kẹt với ngữ nghĩa của getKeygetValue:

List<Entry<Float,Short>> pairList = //... 

sở thích của tôi là tạo ra đơn giản riêng Pair lớp học của bạn:

public class Pair<L,R> { 
    private L l; 
    private R r; 
    public Pair(L l, R r){ 
     this.l = l; 
     this.r = r; 
    } 
    public L getL(){ return l; } 
    public R getR(){ return r; } 
    public void setL(L l){ this.l = l; } 
    public void setR(R r){ this.r = r; } 
} 

Sau đó, tất nhiên tạo một số List sử dụng lớp mới này, ví dụ:

List<Pair<Float,Short>> pairList = new ArrayList<Pair<Float,Short>>(); 

Bạn cũng có thể tạo List s trong số List s, nhưng sẽ khó thực thi kích thước (bạn chỉ có cặp) và bạn sẽ được yêu cầu, như với mảng, có kiểu gõ nhất quán.

+0

Nhưng tôi chắc chắn sẽ chỉ làm cho lớp giữ chỗ và sau đó thêm các trường hợp nó vào một list-- gọi một spade một thuổng ... –

+0

Hãy nói rằng tôi sẽ làm điều này mà không có một lớp học mới. Tôi đang nghĩ đến việc chỉ chạy hai danh sách loại thích hợp. Tại sao nó phàn nàn khi tôi làm: Danh sách riêng floatList = new List (); nhưng không phải khi tôi rời khỏi toán tử gán và chỉ có danh sách riêng floatList; ? Nó vẫn cần phải được khởi tạo phải không? – V1rtua1An0ma1y

+0

@ V1rtua1An0ma1y: vì 'Danh sách' là một giao diện, bạn cần thực hiện, như, nói,' ArrayList' hoặc 'LinkedList'. –

11

Sử dụng Danh sách các phiên bản lớp tùy chỉnh. Lớp tùy chỉnh là một số loại Ghép hoặc Phối hợp hoặc bất kỳ thứ gì. Sau đó chỉ cần

List<Coordinate> = new YourFavoriteListImplHere<Coordinate>() 

Cách tiếp cận này có ưu điểm là nó làm cho thỏa mãn yêu cầu này "biểu diễn toán học đơn giản (như nhân đôi với nhau để trả về một phao duy nhất, vv)" sạch, bởi vì lớp tùy chỉnh của bạn có thể có phương pháp cho bất cứ điều gì toán học bạn cần làm ...

1

Có vẻ như bạn cần tạo lớp cặp của riêng mình (xem discussion here). Sau đó, hãy tạo Danh sách lớp học mà bạn đã tạo

0

Nếu bạn muốn đa dạng, bạn có thể đặt nó trong bản đồ ánh xạ cặp với số tiền lớn. Bằng cách này sẽ chỉ có một cặp giá trị đã cho, nhưng nó có thể đại diện cho nhiều lần xuất hiện.

Sau đó, nếu bạn có nhiều giá trị lặp lại và muốn thực hiện một số thao tác trên tất cả các giá trị, bạn có thể tiết kiệm rất nhiều tính toán.

4

chỉ sửa chữa một số lỗi nhỏ trong mã Mark Elliot:

public class Pair<L,R> { 
    private L l; 
    private R r; 
    public Pair(L l, R r){ 
     this.l = l; 
     this.r = r; 
    } 
    public L getL(){ return l; } 
    public R getR(){ return r; } 
    public void setL(L l){ this.l = l; } 
    public void setR(R r){ this.r = r; } 
} 
Các vấn đề liên quan