list是数组实现的.那么如果一个数组要实现list里的remove以及add方法,应该怎么实现
在remove的时候什么样的情况会造成内存泄漏, 为什么
为什么list可以按顺序add进去元素? 他们的堆栈是怎样的状态
在remove的时候什么样的情况会造成内存泄漏, 为什么
为什么list可以按顺序add进去元素? 他们的堆栈是怎样的状态
解决方案 »
- 请教一个关于系统会话时间设置的问题
- 0xf0 代表什么?
- 问一个关于nio的问题!
- Checkbox 的动作监听 错在哪里?
- 怎样获得字符在JTextArea中的位置?怎样在JTextArea的指定位置输入字符?~~help~~
- 关于stringBuffer清空问题,请各位帮小妹一把
- Vector里的get(int index) 和elementAt(int index)有什么区别吗?
- 急!菜鸟问题:怎么比较两个TEXT文本是否相同
- java读文件高低字节字节顺序是否是反的??如何解决??
- 请问Applet可以通过JDBC-ODBC方式连接数据库吗
- 小程序错误!请教高手!
- java OO设计问题 大家来讨论下
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 ,所以造成了第二种情况。*/
所以基于数组实现的list在remove的时候会有这样的动作:
elementData[--size] = null; // Let gc do its work
当计数器为0的时候便可以回收你可以用WeakReference试一下
最常遇到的问题是引用不为0 也就是你从list删除 但是别的地方还有删除对象的引用
这样remove的对象就不会被释放