迴圈往list中放物件卻總是一個物件的問題
最近在寫程式碼的時候遇到一個問題。大致情況是有一個List物件,要迴圈往list中放入物件。例如:
Student s = new Student();
List list = new ArrayList();
for(int i = 0;i < 10;i++){
//此處設定物件屬性
s.setXXX();
//將設定好屬性的物件放入list
list.add(s);
}
大致程式碼類似於這樣。本以為這樣就可以了,結果發現,list中的物件全都是同一個物件。並不是我想要結果。仔細研究發現一個小問題。分析如下。
在new 一個物件的時候,物件的ID是唯一確定的。在我們將物件放入list中時,list中的其實是物件的引用 。而每次只是簡單的set物件的屬性。add進list中的物件還是同一個物件id,也就是同一個物件。所以每次add之後,list發現物件引用和之前元素一樣,就覆蓋掉了之前add的物件。所以迴圈之後只會出現,list的size只有1。
想要避免這個問題只要每次add時保證物件引用都是不同的即可。
問題簡單,但是容易忽略,希望能給一些人幫助。
相關推薦
迴圈往list中放物件卻總是一個物件的問題
最近在寫程式碼的時候遇到一個問題。大致情況是有一個List物件,要迴圈往list中放入物件。例如: Student s = new Student(); List list = new ArrayList(); for(int i = 0;i < 10;i++){ /
JAVA複製物件給另一個物件
今天算是遇到一個問題了。相當苦惱。需求如下:有2個相同id的物件,但它們的值不同。其中一個物件要用到另一個物件的屬性值。由於在hibernate的sessionFactory().getSession中不能存在2個相同id的物件。故此,想出複製物件。找了很多地方,發現有2種方法
C++定義一個物件和new一個物件的區別與聯絡
由於對C++的使用時斷斷續續的,所以今天拿起來看了,C++中一個最大的特色就是有了類的設計思想 基本後面的所有包括封裝,多型,繼承等都是基於類的思想完成的。 類到物件的過程就是例項化的過程,我經常會看到兩種方式,一種是這樣的: class A{ 。。。 } void ma
java中new出來一個物件和定義一個物件賦值為空有什麼不同
new 一個物件出來,比如SomeClass sc=new SomeClass();這個時候已經為sc這個物件分配了指向 new SomeClass() 所建立的記憶體空間。即對這個物件sc進行了例項化。而SomeClass sc=null,則sc物件未進行例項化,是一個空的物件,未能指向任何記憶體空間。
讓一個物件=另一個物件,修改一個物件的值,如何不影響另一個的值
我有一個自己作的class(LinkedStack),然後聲明瞭兩個物件LinkedStack temp = new LinkedStack();LinkedStack Path。 但是,當我用temp = Path;把path的值給了temp以後;我對temp進行一些刪除
js 將多個物件合併成一個物件 assign方法。ES6新特性有哪些
1.接下來介紹一下ES6在Object新加的方法 assign() 1.作用:將多個物件{} 合併成一個獨立物件。 2.使用方式: Obejct.assign(合併的物件,傳入合併中的物件....) let user = {name:'無敵人',age:19}
# Java中遍歷Object的屬性和屬性值,並以String形式返回||toString()一個物件Object||將一個物件轉化為字串String
Java中遍歷Object的屬性和屬性值,並以String形式返回||toString()一個物件Object||將一個物件轉化為字串String 1.關注每個屬性組 //用List<Map<String, String>>
Unity 3D 化 Anchor Presets 判斷一個 物件 對應另一個物件的位置,左,右,上,下
Hello ,I am Edwin 首先謝謝大家的支援,其次如果你碰到什麼其他問題的話,歡迎來 我自己的一個 討論群559666429來,大家一起找答案,共同進步 由於邏輯比較簡單,所以直接程式碼吧。功能主要是 : 注意: 使用這個功能的時候
鍵賦值往list中新增dict,前面所有字典總被最後一個覆蓋
list = [] a = {'a':'1', 'b':'1'} list.append(a) a['a'] = '2' a['b'] = '2' list.append(a) #最終結果: [{‘a’: ‘2’, ‘b’: ‘2’}, {‘a’: ‘2’, ‘b’: ‘2’}] 原
Java List中新增一個物件多次
在實際應用場景中,可以需要在一個List中新增多個物件,在使用的時候有個誤區就是將一個物件新增多次到List中,導致資料不一致。 測試程式碼: public class test { public static void main(String[] args) {
根據list物件的某一個屬性進行排序
java中Collections.sort方法可以根據list中物件(或者map)的某個屬性進行排序 import com.td.cms.entity.Question; import java.u
Android List(集合)中的物件以某一個欄位排序
在Android開發中,有時我們需要對一個物件的集合按照某一個欄位進行排序, Bean public class Student { private int studentId;
迴圈儲存在事務中為何只儲存到最後一個物件
有時候我們在使用事務儲存一個迴圈中的物件時,可能會出現在提交事務後發現只儲存到了最後一個物件,程式碼如下: session = sf.openSession(); transaction = session.beginTran
Java----list常用方法匯總
實現 如果 date tor 清空 font spa system 相關 package ListTest; import java.util.ArrayList; import java.util.Iterator ; import java.util.List;
530 vue 基礎語法範例匯總 一個模擬tab顯示
javascrip RR body 當前 AC IV function charset 增加 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" />
Python內置的有序集合:list和tuple是,一個可變,一個不可變
增刪 列表 [] 一個 使用 越界 整數 需要 如同 Python內置的一種數據類型是列表:list:#註釋list是一種可變的有序的集合,可以隨時添加和刪除其中的元素 list裏面的元素可以是不同的數據類型譬如整數、字符串、嵌套列表 len( )函數:獲得list
自己寫一個C#數據結構:用List<T>實現一個簡單的Stack
count 實現簡單 ole exceptio tac on() rem linq -- 在C#中利用List<T>實現一個簡單的Stack 需要實現的功能:壓棧、彈棧、查看棧頂元素、查看元素個數、查看Socket是否為空,判斷元素是否在Socket中、清空So
關於ag視訊雖不是穩贏但卻是一個常贏的方法
這也 一個 觀察 重要 並不是 一份 自制力 喜歡 職業 先看看路,任何方法沒有必勝,看看路,挑莊連著有二個,或者閑連著有二個的路子,殺入,如果是莊連的路,全程打莊,如果是閑連的路,全程打閑!!! 註碼:1,2,3,4,5,7,10,14 八級纜 其間任何一口中了,就翻倍打
Java中字串直接賦值和new一個物件,得到的地址值是什麼樣子的
public class StringDemo2 { public static void main(String[] args) { String s1 = "hello"; String s2 = new String("hello"); String s3 = "hello"
從javascript判斷一個物件是否為陣列中學習js語法
1,真正的陣列的判斷方法 javascript中最簡單的宣告陣列方法為: var a = []; 判斷是否為陣列的最直接的方法為: a instanceof Array //true a .constructor == Array //true 這裡涉及到一個i