Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何删除地图的内容?_Java_Dictionary - Fatal编程技术网

Java 如何删除地图的内容?

Java 如何删除地图的内容?,java,dictionary,Java,Dictionary,所以我建立了一个程序,在我进入调试阶段之前,一切似乎都很顺利。我发现的一个大问题是,当我在循环结束时调用map.clear时,我使用的LinkedHashMap实际上并没有删除它以前的内容。因此,我想知道是否有人知道或者可以向我展示一种很好的迭代方法来删除映射的内容?映射接口将clear声明为可选操作。但是,您的标记表示您正在使用LinkedHashMap,Javadocs确实表示调用返回时映射应该为空。您能否提供一个代码示例,演示即使在调用clear之后仍然可以通过某个键检索元素 编辑1:我突

所以我建立了一个程序,在我进入调试阶段之前,一切似乎都很顺利。我发现的一个大问题是,当我在循环结束时调用map.clear时,我使用的LinkedHashMap实际上并没有删除它以前的内容。因此,我想知道是否有人知道或者可以向我展示一种很好的迭代方法来删除映射的内容?

映射接口将clear声明为可选操作。但是,您的标记表示您正在使用LinkedHashMap,Javadocs确实表示调用返回时映射应该为空。您能否提供一个代码示例,演示即使在调用clear之后仍然可以通过某个键检索元素

编辑1:我突然想到,您可能意味着在映射从您的映射中删除后,对象本身不会立即被垃圾收集;我一点也不惊讶。清除映射中的条目并不意味着对象本身必须在该方法完成时进行垃圾收集或最终确定。你能澄清一下你的期望吗

编辑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);
}

您能否提供一个代码示例,以准确地演示您正在执行的操作,这与此不同?

只有当垃圾收集器(其时间表依赖于实现)删除对象时,才会删除这些对象。因此,您唯一能做的就是确保应用程序中不存在对这些对象的引用。如果有,那么它们就不会被垃圾收集


您可以通过调用System.gc;尝试将VM插入垃圾收集

这在OpenJDK1.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);
}

编辑:这说明了你的问题吗?

你能展示一下你的代码,让我们知道你在说什么吗?我也想,但代码太广泛,太零碎,无法发布。抱歉。如果您的代码太复杂,您应该创建一个简单的示例,并测试它是否真的是Map实现的问题,我不敢相信:-。我必须同意home。在这里,Map实现似乎不太可能出错,而且代码可能存在不同的问题。没有样品,我们只能猜测。是的,我想你们是对的。不确定问题出在哪里,但就其功能而言似乎很清楚,它应该满足我的要求。但是,在我的代码中,由于某些原因,它没有被正确清除。我将对它进行一些修补,如果我不能理解它,我可能不得不直接发布代码以寻求帮助。不过,感谢您的所有输入。我没有检索任何内容,只是在清除之前和清除之后对映射执行了System.out.printlnmap语句。在清除之前,它仍然包含相同的值。尝试了这个,但没有这样的运气:/Yes,本质上这是问题的核心。但是,您是否试图说clear应该删除内容?因为它肯定对我不起作用,lol。所以还有其他一些问题:-查看您的JDK源代码-它必须起作用。你的应用程序是多线程的,也许你调用了错误的对象?映射是否包含对自身的间接引用?正如您在上面所说的那样,刚刚测试了这个解决方案,您是正确的,它在这种情况下确实工作得很好。不知道为什么在我的程序中没有正确清除:/BTW:如果您发现问题,请更新您的问题或此答案。。。看起来很有趣,刚刚找到了解决办法。这有点难以解释,但问题本质上是因为我的代码太广泛,我把清晰的语句放错了地方,以及我从哪里获取地图信息,因此我得到了错误的结果。尽管如此,如果没有这里所有人的帮助,我将被困在试图找出一个替代clear的方法的浪费中。所以我真的很感谢大家的帮助,只想再次表示感谢
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);
}