随着TreeMap它的琐碎,提供自定义Comparator,从而覆盖所提供的语义Comparable添加到地图中的对象.HashMap然而,不能以这种方式控制; 提供哈希值和相等性检查的函数不能"侧载".
我怀疑设计界面并将其改装成HashMap(或新类)既简单又有用?这样的事情,除了更好的名字:
interface Hasharator<T> {
int alternativeHashCode(T t);
boolean alternativeEquals(T t1, T t2);
}
class HasharatorMap<K, V> {
HasharatorMap(Hasharator<? super K> hasharator) { ... }
}
class HasharatorSet<T> {
HasharatorSet(Hasharator<? super T> hasharator) { ... }
}
Run Code Online (Sandbox Code Playgroud)
在不区分大小写Map的问题得到了平凡解:
new HasharatorMap(String.CASE_INSENSITIVE_EQUALITY);
Run Code Online (Sandbox Code Playgroud)
这是可行的,还是你能看到这种方法的任何根本问题?
该方法是否在任何现有(非JRE)库中使用?(尝试谷歌,没有运气.)
编辑:hazzen提出的很好的解决方法,但我担心这是我试图避免的解决方法......;)
编辑:更改标题不再提及"比较器"; 我怀疑这有点令人困惑.
编辑:与业绩有关的已接受答案; 我会喜欢更具体的答案!
编辑:有一个实现; 看下面接受的答案.
编辑:改写第一句话,以更清楚地表明它是我正在进行的侧面加载(而不是排序;排序不属于HashMap).
我想让我的代码在附图中找到方形乐高板的角落.
我还想找到它的尺寸,即两个尺寸中的"blops"数量(附图中为48x48).
我目前正在考虑检测个别"blops",到目前为止的结果非常好:模糊,adaptiveThreshold,findContours和基于区域的选择的组合找到在第二个附加图像中呈现的轮廓(着色是随机的).
我现在正在寻找一种算法来找到这些轮廓(或它们的中点)丢失的"网格",但我缺乏谷歌.有任何想法吗?
(对不同方法的建议也非常受欢迎.)
(示例图像显示了放置在角落的砖块 - 如果有帮助的话,算法可以预期这个.)
(样本图像背景相当狂野.如果可能,我更愿意应对.)
2016年7月8日更新:我正在尝试编写一种算法,查找相邻轮廓的条纹形成线条.算法应该能够找到其中的一些,并从中推断整个板块的形式,即使是透视.将更新,如果它的工作......
2017年12月更新:上述算法有点奏效,虽然有点太不可预测了.此外,我遇到透视问题(添加"厚"乐高砖改变表面)和颜色识别(阴影,相机特性等).这项努力暂时搁置.如果我恢复它,我将尝试使用固定摄像机位置直接在板上方和一致的灯光.