list是数组实现的.那么如果一个数组要实现list里的remove以及add方法,应该怎么实现
在remove的时候什么样的情况会造成内存泄漏, 为什么
为什么list可以按顺序add进去元素? 他们的堆栈是怎样的状态

解决方案 »

  1.   

    list 有   ArrayList ,同时还有  linkedlist ,这两种的具体实现可以去看一下算法导论 。内存泄露有两种:1 为对象分配资源后,对象不在使用,但是所占用的资源未释放 2 系统想要释放资源,但是找不到原来的对象。==============
    List<String> strList = new ArrayList<String>();
    String str1 = "first";
    String str2 = "2nd";
    strList.add(str1);
    strList.add(str2);
    str1 = "1st";
    strList.remove(str1); /*这个时候会造成内存泄露,因为str1已经改变了, 这个时候 
    list中的str1 和 字符串 str1 hashcode已经不一样,所以 equals 返回值为false,这个时候就不能remove//掉 新的 str1 ,所以造成了第二种情况。*/
      

  2.   

    弱弱的问一下,两个对象的hashcode相同为什么还相等“==”
      

  3.   

    JVM会回收没有reference的对象。
    所以基于数组实现的list在remove的时候会有这样的动作:
    elementData[--size] = null; // Let gc do its work
      

  4.   

    二楼说得有道理,补充点:因为java有垃圾回收机制,从理论上讲java没有内存泄漏。但是java是由c和c++编写的,所以有些时候会变相出现内从泄漏,比如数据库的一些链接为关闭。
      

  5.   

    java里面对每个对象有引用计数器 
    当计数器为0的时候便可以回收你可以用WeakReference试一下
    最常遇到的问题是引用不为0 也就是你从list删除 但是别的地方还有删除对象的引用 
    这样remove的对象就不会被释放