在LightWAN系统中,有个DomainSet域名的集合对象,单个DomainSet包含数10万个不等的域名,给一个域名,高效判断这个DomainSet中是否包含这个指定域名 要注意域名的层级,比如google.com是包含maps.google.com这个域名的 Java实现 不使用Trie树
时间: 2023-05-27 11:06:59 浏览: 193
可以使用HashSet来实现,将所有的域名都存储在HashSet中,然后判断给定的域名是否存在于HashSet中即可。
需要注意的是,在判断给定域名是否存在于HashSet中时,需要将域名按照层级逐级拆分,然后从最高层级开始判断是否存在于HashSet中,如果存在则继续向下一级逐级判断,直到判断完所有层级或者发现不存在于HashSet中的层级为止。
具体实现可以参考以下代码:
```java
public class DomainSet {
private HashSet<String> domains;
public DomainSet(String[] domainArray) {
domains = new HashSet<>(Arrays.asList(domainArray));
}
public boolean contains(String domain) {
String[] parts = domain.split("\\.");
for (int i = parts.length - 1; i >= 0; i--) {
String subdomain = String.join(".", Arrays.copyOfRange(parts, i, parts.length));
if (domains.contains(subdomain)) {
return true;
}
}
return false;
}
}
```
在以上代码中,构造函数接受一个字符串数组,将其中的所有域名存储在HashSet中。contains方法接受一个域名,将其按照层级逐级拆分,然后从最高层级开始判断是否存在于HashSet中,如果存在则继续向下一级逐级判断,直到判断完所有层级或者发现不存在于HashSet中的层级为止。
阅读全文