我正在从数据库中获取一组元组,并将其放入地图中。数据库查询成本很高。
映射中的元素没有明显的自然顺序,但是插入顺序仍然很重要。对地图进行排序将是一项繁重的操作,因此鉴于查询结果已经按照我想要的方式进行了排序,因此我想避免这样做。因此,我只是将查询结果存储到中LinkedHashMap
,然后从DAO方法返回地图:
public LinkedHashMap<Key, Value> fetchData()
我有一种方法processData
应该在地图上进行一些处理-修改一些值,添加一些新的键/值。定义为
public void processData(LinkedHashMap<Key, Value> data) {...}
但是,一些短毛猫(Sonar等)抱怨说,“数据”的类型应该是诸如“地图”之类的接口,而不是实现“ LinkedHashMap”(squid S1319)。
所以基本上说我应该有
public void processData(Map<Key, Value> data) {...}
但是我希望方法签名说映射顺序很重要 -这对算法很重要processData
-这样我的方法就不会仅传递任何随机映射。
我不想使用SortedMap
,因为它(来自的javadocjava.util.SortedMap
)“是根据其键的自然顺序来排序的,或者是由通常在排序的地图创建时提供的Comparator来排序的。”
我的键没有自然的顺序,创建比较器不执行任何操作似乎很冗长。
而且我仍然希望它是一个地图,以利用它put
来避免重复的键等。如果没有,则data
可能是一个List<Map.Entry<Key, Value>>
。
那么我怎么说我的方法想要一个已经排序的地图?可悲的是,没有java.util.LinkedMap
接口,否则我会使用它。