一個奇怪的Java集合問題
int size = list.size();
Integer existIndex = -1;
for (int index = 0; index < size; index++) {
Photo photo = list.get(index);
// 確保不會出現多個主圖:如果已經找到了主圖,把後面的都設定為“非主圖”,防止前端驗證失敗,出現多個主圖的情況
if (existIndex != -1) {
photo.setCover(0);
// list.set(index,photo);
}
Integer c = photo.getCover();
// 找到了主圖
if (c != null && c.equals(1)) {
existIndex = index;
}
}
上週五的時候,修改集合中的1個元素,獲得第N物件,修改物件的屬性,這個時候list中的物件屬性就更改了,但是,在迴圈結束之後,發現list中的元素沒有修改,又恢復原狀了。必須通過list.set(index,photo); 才保證符合預期。
很奇怪,難道list.get,再修改不可行?
週末寫了幾個集合list的例子,發現都可以正常修改。
import java.util.ArrayList;
import java.util.List;
//測試,修改Java集合中的元素的屬性
public class ListTest {
public static void main(String[] args) {
List<User> list1 = buildList();
list1.get(0).setName("name1");
list1.get(0).setAge(1);
System.out.println(list1.get(0));
List<User> list2 = buildList();
User user2 = list2.get(0);
user2.setName("name2");
user2.setAge(2);
System.out.println(list2.get(0));
for (User user : list2) {
user.setName("name3");
user.setAge(3);
}
System.out.println(list2.get(0));
updateList(list2);
System.out.println(list2.get(0));
}
private static void updateList(List<User> list2) {
System.out.println(list2.get(0));
if (true) {
for (User user : list2) {
user.setName("name4");
user.setAge(4);
}
System.out.println(list2.get(0));
}
System.out.println(list2.get(0));
}
public static List<User> buildList() {
List<User> list = new ArrayList<User>();
User user = new User();
user.setName("name");
list.add(user);
return list;
}
}
class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
}
通過例子可以看出,list修改方式沒有問題。但是,為什麼專案中的程式碼有問題呢?
今天是週一,再次debug,發現去掉list.set(index,photo); 結果是正確的。
這樣我就搞不明白,上週五的程式碼問題呢。
無法復現問題,就只能“到此為止”了~
相關文章
- 一個奇怪的Golden Gate的問題Go
- 遇到一個git branch很奇怪的問題Git
- 關於desc的一個奇怪問題及分析
- 發現一個有關error的非常奇怪的問題Error
- 40個Java集合面試問題和答案Java面試
- 關於go結構體一個奇怪問題Go結構體
- JavaScript 中的一些奇怪問題JavaScript
- 兩個看似奇怪的MySQL語句問題MySql
- 一個很奇怪的問題:關於struts自定義標籤
- 一個奇怪的dell sc440安裝redhat5.2問題Redhat
- 一個java加密引起的問題Java加密
- 一次奇怪的StackOverflowError問題查詢之旅Error
- itoa函式的奇怪問題函式
- 遇到mysql的奇怪問題了MySql
- 關於session的奇怪問題Session
- MySQL複製的奇怪問題MySql
- jsp中的奇怪問題JS
- 請問一個java nio問題Java
- 40個Java集合面試問題和答案,面試奇葩問題,你掌握了嗎?Java面試
- ???做了一個CMP, 但透過sessionbean呼叫資料時卻有個奇怪的問題??SessionBean
- 容器(一)剖析面試最常見問題之 Java 集合框架面試Java框架
- 回覆java_gh的一個問題Java
- 一個關於Java Excel的問題JavaExcel
- 請教大家一個JAVA的問題Java
- 解決了半個月來電腦的奇怪問題
- 使用strace分析exp的奇怪問題
- [求助] start with connect by 奇怪的問題
- jive安裝奇怪問題!!!!!!!!
- 【Java面試題】54 去掉一個Vector集合中重複的元素Java面試題
- Java mail ssl並存的一個問題JavaAI
- Java NIO 執行緒 的一個問題Java執行緒
- 那些經常被問的JAVA面試題(1)—— 集合部分Java面試題
- 一個小問題 TestClient.javaclientJava
- 學java不久,傻瓜問題一個Java
- MySQL:一個奇怪的hang案例MySql
- 奇怪的登入問題及解決
- 大佬們,最近測 PC 客戶端遇到一個很奇怪的問題,找不到原因。客戶端
- Mr bangq請教你一個java列印的問題!Java