![](/img/trans.png)
[英]Get the index of an object I just added to an ArrayList in Java/Android
[英]Java object added to ArrayList not showing
我有兩個班級:
Class1 包含一個 Class2 類型的 ArrayList
當我嘗試按如下方式添加新對象時:
Class2 object = new Class2();
Class1Object.getArrayList().add(object);
然后當我遍歷 getArrayList() 時似乎已經添加了對象
但是,我有另一個類型為 class1 的 ArrayList,當我遍歷此對象時,添加的對象沒有出現?
我認為由於對象是按引用的,因此應該將其添加到 class1 類型的 ArrayList 中。 任何人都可以解釋這一點嗎?
public class Subject implements Serializable {
private static final long serialVersionUID = 1L;
private String subjectName;
private int hours;
private int mins;
private ArrayList<Task> tasks;
private SimpleDateFormat date;
public Subject(String subjectName){
this.subjectName = subjectName;
hours = 0;
mins = 0;
tasks = new ArrayList<Task>();
date = null;
}
public ArrayList<Task> getTasks() {
return tasks;
}
}
public class Task implements Serializable {
private static final long serialVersionUID = 2L;
private String description;
private boolean isCompleted;
public Task(String description){
this.description = description;
isCompleted = false;
}
}
那么我有:
ArrayList<Subject> subjectsList = new ArrayList<Subject>();
然后我想為給定的主題添加一個新任務,所以我這樣做:
Task task = new Task(description);
ArrayList<Task> taskList = subject.getTasks();
taskList.add(task);
當我迭代subject.getTasks();
它在那里,但是當我遍歷 subjectList 時,新任務不再存在。
這是顯示新任務的第一個循環:
for (Task task : subject.getTasks()){
System.out.println( task.toString() );
}
而在所有對象進行迭代的代碼subjectsList
for (Subject s : subjectsList){
for (Task t : s.getTasks()){
System.out.println( t.toString() );
}
}
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
subject = (Subject) bundle.get("selected_subject");
subjectsList = (ArrayList<Subject>) bundle.get("subjects_list");
}
所以你有兩個列表,你將一個對象添加到這兩個列表之一,並希望在第二個列表中找到它。 為什么會出現在第二個列表中? 他們是兩個不同的列表。
Java 對象就像真實的對象。 如果你把一條信息放在一個瓶子里,這個信息就不會出現在所有其他瓶子里。 只有在你放置它的地方。
如果您創建 2 個指向同一個對象的變量,則兩個引用都將包含該值,例如:
Class2 object = new Class2();
Class1 class1 = new Class1();
Class1 class1second = class1;
class1.getArrayList().add(object);
class1 和 class1second 都包含對象
如果是
Class2 object = new Class2();
Class1 class1 = new Class1();
Class1 class1second = new Class1();
class1.getArrayList().add(object);
只有一個對象包含該值。
我猜這是一個范圍問題。 嘗試只使用This.Class1Object.getArrayList().add(object);
因為也許您將對象添加到數組的本地化版本中。
我不明白這個問題。 很難理解。
但是,如果您的意思是 Class1Object 的第二個實例具有相同的 ArrayList 或不是您應該注意靜態的那個實例。
如果 ArrayList 的變量是靜態的,那么這些 Class 的所有實例都共享相同的 ArrayList 實例!
除非必要,否則避免使用靜態。
如果這不能解決您的問題,請提供更多示例代碼。
您似乎是在說您有兩個列表。 並且您希望添加到其中一個列表的對象自動出現在另一個列表中。
這不會發生在ArrayList
或任何其他“正常”的List
實現中。
“發生”的唯一方法是如果兩個列表是同一個對象。
(我喜歡 JB Nizet 的“瓶子里的信息”類比。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.