我需要写这样的东西:
private Set processedLinks = new HashSet(); public boolean isProcessed(String url) throws MalformedURLException { return processedLinks.contains(new URL(url)); }
这不起作用,因为创建的 URL 是集合中 URL 之外的另一个对象。我需要将创建的 URL 的主机和文件与 HashSet 中的 URL 的匹配进行比较。什么是最好的方法?
我想用我的类扩展 URL 并覆盖 equals(),但 URL 是最终的。所以我的第二个想法是制作类似 URLHashSet 的扩展 HashSet 并重写 contains 方法。但我不确定它是否会对性能产生负面影响,因为该 HashSet 将包含数万个元素。
您知道如何解决这个问题吗?谢谢。
最佳答案
我建议使用 URI而不是网址。
应避免使用URL.equals
。来自 docs您将看到它需要名称解析(这是一个阻塞操作)并且“已知与 HTTP 中的虚拟托管不一致”。 URI 更有意义,因为您实际上不是在比较物理位置,而是在比较标识符。
关于java - 如何检测 URL 对象是否与 Collection 中的另一个 URL 对象指向相同的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5329769/