【发布时间】:2016-09-02 09:23:14
【问题描述】:
您好,这是我在 Stackoverflow 上的第一篇文章。 抱歉,如果这是重复的问题,但我已经在 google 和 stackover 中搜索以找到解决方案,但我得到了零。
我的项目中有这个问题,我在ArrayList 中的所有值都被最后一个索引值替换了。我创建了这个新的简单项目以使其易于理解。
public class MainActivity extends AppCompatActivity {
ArrayList<String> temp1 = new ArrayList<>();
ArrayList <ArrayList<String>> tampung = new ArrayList <> ();
String kata;
TextView eks1,eks2,hasil1,hasil2,size;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
eks1 = (TextView) findViewById(R.id.ekspektasi1);
eks2 = (TextView) findViewById(R.id.ekspektasi2);
hasil1 = (TextView) findViewById(R.id.hasil1);
hasil2 = (TextView) findViewById(R.id.hasil2);
size = (TextView) findViewById(R.id.size);
//add pertama
temp1.clear();
for (int c = 0; c < 5; c++) {
kata = "ini kata ke " + (c+1);
temp1.add(kata);
}
//Masuk ke tampungan array untuk index 0
tampung.add(temp1);
Log.d("Tampungan dalam 1", temp1.toString());
eks1.setText("EKSPEKTASI 1 : "+temp1.toString());
//data pertama dihapus ganti dengan data ke 2
temp1.clear();
//add data ke 2
for (int c = 0; c < 5; c++) {
kata = "ini " + (c+1);
temp1.add(kata);
}
//masuk ke tampungan array untuk index 1
tampung.add(temp1);
Log.d("Tampungan dalam 1", temp1.toString());
eks2.setText("EKSPEKTASI 2 : "+temp1.toString());
Log.d("Tampungan luar 1",tampung.get(0).toString());
hasil1.setText("HASIL 1 : " +tampung.get(0).toString());
Log.d("Tampungan luar 2",tampung.get(1).toString());
hasil2.setText("HASIL 2 : "+tampung.get(1).toString());
Log.d("Size", String.valueOf(tampung.size()));
size.setText("SIZE DARI TAMPUNGAN ARRAY : "+tampung.size());
}
}
这是结果(我从 logcat 复制的)
09-02 16:12:42.444 15418-15418/com.example.siwonhansamu.tolongcoba D/Tampungan dalam 1: [ini kata ke 1, ini kata ke 2, ini kata ke 3, ini kata ke 4, ini kata ke 5]
09-02 16:12:42.444 15418-15418/com.example.siwonhansamu.tolongcoba D/Tampungan dalam 2: [ini 1, ini 2, ini 3, ini 4, ini 5]
09-02 16:12:42.444 15418-15418/com.example.siwonhansamu.tolongcoba D/Tampungan luar 1: [ini 1, ini 2, ini 3, ini 4, ini 5]
09-02 16:12:42.444 15418-15418/com.example.siwonhansamu.tolongcoba D/Tampungan luar 2: [ini 1, ini 2, ini 3, ini 4, ini 5]
09-02 16:12:42.444 15418-15418/com.example.siwonhansamu.tolongcoba D/Size: 2
谢谢:D
【问题讨论】:
-
这些值对我来说是正确的。
-
您将同一对象两次添加到“tampung”列表中。所以 tampung.get(0) 和 tampung.get(1) 指向同一个列表 (temp1)。我认为您要做的是添加两个不同的列表。不要在 temp1 上使用 .clear(),而是创建一个新对象并将其添加到您的主列表中。但你的问题很不清楚,所以我希望我理解你是正确的。
-
@911DidBush 是对的。这是关于arraylist的问题。如果其中有嵌套的arraylist,则arraylist 中的项目不容易被删除,因为java 中的list 是不可变的。在这里查看我的回复stackoverflow.com/questions/38966252/…