0

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

我正在尝试在 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);

有效,并且可能是正确的方法,但是这样做似乎很长。

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

4

3 回答 3

2

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

例如

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

对比

List<String> widgets = new ArrayList<String>();
// ...
String widget = widgets.get(0);
widgets.set(2, widget + " version 2");
于 2012-12-15T21:08:23.047 回答
1

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

g.get(2).append("Something");
于 2012-12-15T21:10:04.393 回答
0

g.get(2).append("Something");如果您使用StringBuilder实例初始化列表值,则可以使用。否则你会得到一个NullPointerException.

请注意,在您的代码中,您定义了一个ArrayListof 类型StringBuilder,但随后您尝试为其分配一个ArrayListof 类型Integer,这不起作用

于 2012-12-15T21:09:14.170 回答