import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
public class TheTest {

public static void main(String[]args){
List<student>my=new ArrayList<student>();
student stu1=new student("软件");
student stu2=new student("开发");
my.add(stu1);
my.add(stu2);
stu2=null;  //关键这句
Iterator it=my.iterator();
while(it.hasNext()){
System.out.println(it.next());   
}

}
}
public class student {
public String name="";
public student(String name){
this.name=name;
}
public String toString(){
return name;
}
}   当stu2=null时候,按常理来说  输出的应该是软件  null;
 
第2个问题
LinkedList.add("sdsd");
LinkedList.add(null);
LinkedList.add("87878");
java中的ArrayList.add(null);这样居然都可以??
数据结构书中链表,中有一个为空指针,那空指针的后驱值怎么还能添加的进去??
c#中是不行的。谁能解释下java中的Arraylist的数据结构。。  (说的好另外加分。)

解决方案 »

  1.   

    public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, SerializableList 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。看看api吧
      

  2.   

    第一问题:说明List集合装载的并不是引用,而是对象
    第二问题:正因为第一个问题,所以List集合是允许装载null的
      

  3.   

    student stu1=new student("软件");
            student stu2=new student("开发");
            my.add(stu1);
            my.add(stu2);
            stu2=null;  //关键这句执行到 stu2=null这句话list都ADD玩了,怎么输出
    换个位置
    public static void main(String[] args) {
    List<Student> my = new ArrayList<Student>();
    Student stu1 = new Student("软件");
    Student stu2 = new Student("开发");
    stu2 = null; // 关键这句
    my.add(stu1);
    my.add(stu2); Iterator it = my.iterator();
    while (it.hasNext()) {
    System.out.println(it.next());
    } }
    这样就达到你的效果了
      

  4.   

    他的底层实现上面没有做空值的判断
     public boolean add(E o) {
    addBefore(o, header);
            return true;
        } private Entry<E> addBefore(E o, Entry<E> e) {
    Entry<E> newEntry = new Entry<E>(o, e, e.previous);
    newEntry.previous.next = newEntry;
    newEntry.next.previous = newEntry;
    size++;
    modCount++;
    return newEntry;
        }
      

  5.   

     my.add(stu2);
    //这里的stu2并没有设定为null啊,当然不会生成null啦
            
      

  6.   

        
    student stu2=new student("开发");这句创建的是一个对象,你把stu2添加到list里面,
       再把stu2=null,是不影响list里面的值的,因为你list.add(stu2)执行在前嘛!list允许有空值!!!
      

  7.   


    student stu2=new student("开发");//new的时候指向“开发”
            my.add(stu1);
            my.add(stu2);//把“开发”放进去
            stu2=null;  //再把stu2指向null(与前面的互不影响)这是API的说明:
    public class ArrayList<E>extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, SerializableList 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。
      

  8.   

    list和set所存放的数据只是数据当时的一个copy,像set也存在许多的问题
      

  9.   


    import java.util.ArrayList;
    import java.util.List;
    import java.util.Iterator;
    public class TheTest {
        
        public static void main(String[]args){
            List<student>my=new ArrayList<student>();
            student stu1=new student("软件");
            student stu2=new student("开发");
            my.add(stu1);
            my.add(stu2);
            //stu2=null;  //关键这句
            stu2.name="wwww";//上面改成这句
            Iterator it=my.iterator();
            while(it.hasNext()){
                System.out.println(it.next());      
            }
            
        }
    }
    public class student {
        public String name="";
        public student(String name){
            this.name=name;
        }
        public String toString(){
            return name;
        }
    }
    stu2=null的输出结果是
    软件
    开发输出结果是
    软件
    wwww
    同样都是引用类型 为什么差距就那么大?
      

  10.   

    List装载的是对象,不是浅拷贝。