2011-01-25 16 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的便利,只要得到一个与特定键或者关联的值。