Java列表集方法

时间:2012-12-15 21:03:51

标签: java

好的,我有一个问题,我的代码似乎有效,但我没有特别好地测试它。

我正在尝试在ArrayList中设置一个元素。

ArrayList<StringBuilder> g=new ArrayList<StringBuilder>();
//set the array contents
g.get(2).append("Something");

我知道这样做

StringBuilder q=g.get(2);
q.append("something else?");
g.set(2,q);

有效,并且可能是正确的方法,但它似乎有很长的路要走。

我这样做是对的,如果我不是,那么这是我提到的第二种方式吗?

3 个答案:

答案 0 :(得分:1)

如果您有StringBuilder的列表,这些列表已经过适当修改,那么第一种方法就可以了。如果你有一些不可变类型的列表(比如String),那么由于你不能改变你得到的对象,你必须使用第二种方法的变体,因为结果不是同一个对象。

e.g。

List<StringBuilder> widgets = new ArrayList<StringBuilder>();
// ...
StringBuilder widget = widgets.get(0);
widget.append(" version 2");

VS

List<String> widgets = new ArrayList<String>();
// ...
String widget = widgets.get(0);
widgets.set(2, widget + " version 2");

答案 1 :(得分:1)

调用List#get()方法时,您正在检索对StringBuilder对象的引用。 StringBuilder是一个可变对象。因此,如果要在索引2处修改StringBuilder的内容,则在修改后不需要再次设置引用。因此,以下就足够了:

g.get(2).append("Something");

答案 2 :(得分:0)

如果您使用g.get(2).append("Something");个实例初始化列表值,则

StringBuilder有效。否则你将获得NullPointerException

请注意,在您的代码中,您定义ArrayList类型StringBuilder,但之后您尝试为其分配ArrayList类型Integer,但这不起作用< / p>