list新增物件的clear問題

2021-09-11 20:51:44 字數 1009 閱讀 9518

public class solution {

public list> levelorderbottom(treenode root) {

listlist=new linkedlist();

list> res=new arraylist>();

if(root==null) return res;

queuequeue=new linkedlist();

queue.offer(root);

while(!queue.isempty()){

int size=queue.size();

for(int i=0;i這是一棵二叉樹[3,9,20,null,null,15,7]從下往上層次遍歷的**,它的輸出是[[3]][[9, 20], [9, 20]][[15, 7], [15, 7], [15, 7]],這是因為事實上,這和list引用資料型別位址有關,由於list存放的是乙個物件的位址,而不是這個物件的值,所以當物件更新之後,之前加入res物件的list的值會因為list的物件更新,但物件位址沒有發生變化,所以當res遍歷的時候,由於是存放的位址,我們會取到同乙個list物件,而物件的值也更新成了最後乙個迴圈所賦的值。更新為如下**就沒有問題:

public class solution {

public list> levelorderbottom(treenode root) {

list> res=new arraylist>();

if(root==null) return res;

queuequeue=new linkedlist();

queue.offer(root);

while(!queue.isempty()){

listlist=new arraylist();

int size=queue.size();

for(int i=0;i輸出[[3]][[9, 20], [3]][[15, 7], [9, 20], [3]]

List集合批量新增物件屬性

在網上搜了幾個文章,一言難盡,自己寫乙個 物件集合 list list newarraylist 通過collections集合工具類進行批量新增 第乙個引數為存放得集合型別,list set都可以,第二個引數存放實體屬性 collections.addall list,newesentity uu...

C vector新增物件方式

3 vector新增物件方式2 指定容量 1 vector每新增乙個物件,就會進行一輪呼叫拷貝建構函式建立新物件 2 若新增物件時容量不足 1 先通過拷貝構造出來建立新物件 2 進行擴容遷移原先的物件 3 新增 1 步驟中建立的新物件 3 若vector初始化時未指定capacity容量,則每新增乙...

js動態新增物件

js的陣列,字串,物件操作是實現一些功能不可缺少的部分。一般情況下js的陣列和字串動態加起來比較方便,都有自己提供的方法,陣列的push 字串直接用加號等。但是js物件動態新增就需要一點工作了 下面我寫了兩種動態新增物件的方法 第一種function toobj1 key,val data key ...