一個奇怪的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); 結果是正確的。
這樣我就搞不明白,上週五的程式碼問題呢。
無法復現問題,就只能“到此為止”了~
相關文章
- 上線後遇到一個很奇怪的問題
- JavaScript 中的一些奇怪問題JavaScript
- 兩個看似奇怪的MySQL語句問題MySql
- 一次奇怪的StackOverflowError問題查詢之旅Error
- 一個奇怪的 Bug
- 40個Java集合面試問題和答案,面試奇葩問題,你掌握了嗎?Java面試
- 容器(一)剖析面試最常見問題之 Java 集合框架面試Java框架
- j2me rms 的奇怪問題
- [20180417]奇怪的grep過濾問題.txt
- [20211210]優化遇到的奇怪問題.txt優化
- 大佬們,最近測 PC 客戶端遇到一個很奇怪的問題,找不到原因。客戶端
- MySQL:一個奇怪的hang案例MySql
- python pip安裝 setuptools相關的一些奇怪問題Python
- 那些經常被問的JAVA面試題(1)—— 集合部分Java面試題
- [20220811]奇怪的隱式轉換問題.txt
- 集合 bcadd 的精度問題?
- 集合效能問題
- 使用 JMETER 匯入 jar 包,開啟執行緒迴圈後,遇到的一個奇怪的的問題JMeterJAR執行緒
- 一個關於Linq對引用型別元素集合去重問題的思考型別
- 奇怪的OGG問題:DBLOGREADER mode: (308) ORA-00308
- 超詳細的Java面試題總結(三)之Java集合篇常見問題Java面試題
- 記一次奇怪的檔案控制程式碼洩露問題
- 請問一個 authorize的問題
- 老哥們我遇到一個很奇怪的問題 子程式間互相影響。。求幫忙解決
- Java集合詳解(一):全面理解Java集合Java
- playwright 中使用 xpath 定位元素遇到的奇怪問題
- 一文搞懂所有Java集合面試題Java面試題
- Java集合——TreeMap(一)Java
- Java集合(一) —— ArrayListJava
- 【java】記錄一次非常奇怪的衝突Java
- 一個有趣的this指向問題
- 一個有趣的鎖問題
- MySQL:一個特殊的問題MySql
- 最近思考的一個問題
- Java集合系列(一):集合的定義及分類Java
- Java 集合 ArrayList 原始碼分析(帶著問題看原始碼)Java原始碼
- 建立一個物件的集合物件
- Java Collection集合面試題Java面試題
- 學java就兩個問題Java