从例子看List的add()方法的工作机制

创建一个具有两个属性 value(int) 和 name(String)的实体类:

package  com.test;

public   class  Entity  {
    
private  int value ;
    
private String name ;  
    public Entity(int value,String name){
        
this.value=value;
        
this.name=name;
    }

    
public void setValue(int value){
        
this.value=value;
    }

    
public int getValue(){
        
return this.value;
    }

    
public void setName(String name){
        
this.name=name;
    }

    
public String getName(){
        
return this.name;
    }

}

 三个测试得到不同的结果:

1.创建一个全局变量en来保存实体的值

package  com.test;

import  java.util.List;
import  java.util.Set;
import  java.util.ArrayList;
import  java.util.Iterator;

public   class  EntityTest  {
    
public static void main(String[] args) {
       

        Entity en = new Entity();
        List list 
= new ArrayList(0);
        
int initValue=0;
        String initName
="*";
        
for(int i=0;i<10;i++){
            en.setName(initName);
            en.setValue(initValue);
            initName
+="*";
            initValue
+=1;
            list.add(en);        
        }

        Iterator it 
= list.iterator();
        
while(it.hasNext()){
            Entity ent
=(Entity)it.next();
            System.out.println(ent.getValue()
+":"+ent.getName());
        }

    }
    
}

1.结果是:

9:**********
9:**********
9:**********
9:**********
9:**********
9:**********
9:**********
9:**********
9:**********
9:**********

2.创建了十个对象:

package  com.test;

import  java.util.List;
import  java.util.Set;
import  java.util.ArrayList;
import  java.util.Iterator;

public   class  EntityTest  {
        List list = new ArrayList(0);
        
int initValue=0;
        String initName
="*";
        
for(int i=0;i<10;i++){
            Entity en 
= new Entity();
            en.setName(initName);
            en.setValue(initValue);
            initName
+="*";
            initValue
+=1;
            list.add(en);        
        }

        Iterator it 
= list.iterator();
        
while(it.hasNext()){
            Entity ent
=(Entity)it.next();
            System.out.println(ent.getValue()
+":"+ent.getName());
        }

    }
    
}

结果是:

0:*
1:**
2:***
3:****
4:*****
5:******
6:*******
7:********
8:*********
9:**********

3.

public   class  EntityTest  {
    
    public static void main(String[] args) {
 
       Entity en = new Entity();
        List list 
= new ArrayList(0);
        
int initValue=0;
        String initName
="*";
        
for(int i=0;i<10;i++){
            en.setName(initName);
            en.setValue(initValue);
            initName
+="*";
            initValue
+=1;
            list.add(en);
            Iterator it 
= list.iterator();
            
while(it.hasNext()){
                Entity ent
=(Entity)it.next();
                System.out.println(ent.getValue()
+":"+ent.getName());
            }
    
        }
    }    
}

结果是:

0:*
1:**
1:**
2:***
2:***
2:***
3:****
3:****
3:****
3:****
4:*****
4:*****
4:*****
4:*****
4:*****
5:******
5:******
5:******
5:******
5:******
5:******
6:*******
6:*******
6:*******
6:*******
6:*******
6:*******
6:*******
7:********
7:********
7:********
7:********
7:********
7:********
7:********
7:********
8:*********
8:*********
8:*********
8:*********
8:*********
8:*********
8:*********
8:*********
8:*********
9:**********
9:**********
9:**********
9:**********
9:**********
9:**********
9:**********
9:**********
9:**********
9:**********

        如此可见在add时不是将每个生成一个对象后将它逐一加入List中,而是采用缓冲区技术以提高效率,这样就有上面的测试结果了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值