从java中的HashMap返回通配符匹配列表

Sar*_*rah 10 java string wildcard hashmap

我有一个Hashmap,可能在String中包含通配符(*).

例如,

HashMap<String, Student> students_;
Run Code Online (Sandbox Code Playgroud)

可以将约翰*作为一把钥匙.我想知道JohnSmith是否匹配student_中的任何元素.我的字符串可能有几个匹配(John*,Jo*Smith等).有什么方法可以从我的HashMap中获取这些匹配的列表吗?

是否有另一个我可以使用的对象,它不需要我遍历我的集合中的每个元素,或者我是否必须将它吸收并使用List对象?

仅供参考,我的收藏品中将包含少于200个元素,最终我希望找到与最少量通配符匹配的对.

Xav*_*ica 3

由于哈希函数的原因,不可能使用 hasmap 来实现。它必须分配 的哈希值和等人"John*"的哈希值。"John Smith"相同的值。

如果您编写自己的自定义类WildcardString包装 String,并以返回 0compareTo的方式实现,则可以使用 TreeMap 来实现"John*".compareTo("John Smith")。您可以使用正则表达式来完成此操作,就像其他答案已经指出的那样。

看到您想要通配符匹配的列表,您可以随时删除找到的条目,然后迭代TreeMap.get()。输入完名字后,记得将钥匙放回原处。

这只是实现这一目标的一种可能方法。如果元素少于 200 个,您就可以进行迭代。

更新:为了正确地对 施加顺序,您可以区分比较两个s (意味着它是键之间的比较)和比较 a与 a (将键与搜索值进行比较)TreeSet的情况。WildcardStringWildcardStringString

  • 在WildCardString类中创建compareTo(string)方法会破坏compareTo方法的约定,因为:`wildCardString.compareTo(string)`可能不是相反的符号或`string.compareTo(wildCardString)`。另外,建议compareTo与equals保持一致。 (2认同)