所以我已经构建了一个程序,在进入调试阶段之前,一切似乎都很顺利。我发现的一个大问题是,当我在循环结束时调用LinkedHashMap
时,我使用的map.clear()
实际上并没有删除它之前的内容。所以我想知道是否有人知道或者可以向我展示删除地图内容的好方法?
答案 0 :(得分:4)
这完全适用于Open JDK 1.6。如果你查看LinkedHashMap的源代码,那根本不可能无法工作。
public static void main(String[] args) {
LinkedHashMap<String, String> test = new LinkedHashMap<String, String>();
test.put("a", "1");
test.put("b", "2");
test.put("c", "3");
test.put("d", "4");
System.err.println(test);
test.clear();
System.err.println(test);
}
编辑:这是否描述了您的问题?
答案 1 :(得分:2)
Map
接口将clear()
声明为可选操作。但是,您的标记表示您正在使用LinkedHashMap
,并且Javadocs确实说调用返回时地图应为空。您是否可以提供一个代码示例,证明即使在调用clear()
之后仍然可以通过某些键检索元素?
编辑#1:我发现你可能意味着在从Map
删除映射后,对象本身不会立即被垃圾收集;这根本不会让我感到惊讶。清除映射中的条目并不意味着对象本身必须在该方法完成时进行垃圾收集或最终确定。你能澄清一下你的期望吗?
编辑#2 我写了以下测试用例:
public static void main(String args[]) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("one", 1);
map.put("two", 2);
map.put("three", 3);
System.out.println(map);
map.clear();
System.out.println(map);
}
观察以下输出:
{one=1, two=2, three=3}
{}
您能否提供一个代码示例,准确演示您正在做什么,与此不同?
答案 2 :(得分:1)
只有在垃圾收集器(其计划与实现相关)删除对象时才会删除对象。因此,您唯一能做的就是确保应用程序中不存在对这些对象的引用。如果有,那么它们将不会被垃圾收集。
您可以尝试通过调用System.gc();
将虚拟机拨入垃圾收集。