2011-01-25 65 views
1

在C#中,有使用機會:使用Array或ArrayList中兩種結構在Java中

Arraylist<String,int> data = Arraylist(); 

,據我記得。

Java中有這個版本嗎?

例如,陣列上的信息將是:

Apple 5 
Tomato 3 
Potato 9 
... etc. 

這就是爲什麼我試圖限定這種結構。

編輯:

如何創建一個類,如;

public class x 
{ 
int a; 
String b; 
} 

並創建該類的數組列表。

ArrayList<x> data = new ArrayList<x>(); 

這項工作?

+3

C#不允許。事實上,在C#中沒有像通用ArrayList那樣的東西。並且列表採用單個通用參數。 – 2011-01-25 18:28:37

+0

注意:C#應該是`Dictionary `,其中的字符串是唯一的。擁有非唯一鍵值列表稍微簡單一些。 – 2011-01-25 18:29:01

+0

你對這段代碼的意圖是什麼?數字與`String`的關係是什麼?這裏做的最好的事情很大程度上取決於這一點。 – ColinD 2011-01-25 18:52:16

回答

2

另一個選擇(我並不是說這是一個更好的選擇)是使用:

List<Pair<String, Integer>> list = new ArrayList<Pair<String, Integer>> 

你有什麼等級Pair

class Pair<E, F> { 
    public E one; 
    public F two; 
} 
5

假設您正在尋找{key,value}對的方法,那麼您應該使用Map。下面的例子,並檢查了Java文檔。

Map<String,Integer> someMap = new HashMap<String,Integer>(); 

在地圖上閱讀更多here

如果你正在尋找一個佔位符來存儲這段數據,那麼你需要這樣的東西。

public final class Fruit{ 

private String fruitName; 
private Integer fruitCount; 

//constructor initialized values. 
//getters and setters for those 
} 

然後在你的主類中定義這種方式。

List<Fruit> fruits = new ArrayList<Fruit>(); 

要閱讀更多清單,請閱讀link

2

在我看來,你需要的Map代替List

Map<String, Integer> map = new HashMap<String, Integer>(); 
map.put("Apple", 5); 
map.put("Tomato", 3); 
map.put("Potato", 9); 
0

Wh在這裏做的最好的事情是很大程度上取決於String和數字之間的關係。這裏有很多可能性以及你可能想要對它們做什麼。

數量是ID或一些這樣的密切相關的屬性:

創建類來表示這些對象及其屬性相關聯。

public class Item { 
    private final int id; 
    private final String name; 

    // constructor, getters, equals, hashCode, toString 
} 

數爲命名的項目數:

使用GuavaMultiset保留的項目數。

Multiset<String> items = HashMultiset.create(); 
items.add("Apple", 5); 
items.add("Tomato", 3); 
// etc. 

數量是別的東西有關String,但不夠緊密單一對象存儲:

使用正常Map在其他的答案建議。

一個Pair是不是一個很好的解決方案

當你接受的答案建議使用Pair類的,我強烈反對,作爲Pair無助於幫助你理解兩個值包含是也不它們之間有什麼關係,它不提供Map的便利,只要得到一個與特定鍵或者關聯的值。