繁体   English   中英

Java:检查map的两个列表是否有相同的元素

[英]Java : check if two lists of map have the same elements

我有两个这样的列表(Map<String,Object> 列表):

list1 : [("name","Tom"),("age","35"),("score",99.1)], [("name","Mary"),("age","20"),("score",62.2)]
list1 : [("name","Mary"),("age","20"),("score",62.6)], [("name","Tom"),("age","35"),("score",98.9)]

我想验证两个列表是否相同。 但是当“分数”小于1时,我应该看成是一样的。 例如99.1和98.9应该算是同一个分数。

两个列表是无序的。

我怎样才能在 O(n) 中实现这一点?

我怎样才能在 O(n) 中实现这一点?

数学上不可能。

一些注意事项:

  • 拥有一个 Map<String, Object> 是非惯用的 java。使用此信息制作一个 class,例如名为Person
  • 作为一般原则,您可以执行此操作的最快时间是 O(n logn):对两个列表进行排序 (2x O(nlogn)),然后同时通过两个列表排序 go,您可以严格递增,然后进行比较:2x O(n) . 2O(nlogn)+2O(n),归结为 O(n logn)。 但是由于使用Map<String, Object>而不是Person ,对这些进行排序比需要的更复杂。

另一种选择是将所有数据直接插入到一个自排序结构中,例如,它可以是一个 TreeMap,使用某人的姓名作为键。

检查任何两个给定分数是否在彼此的一个点内是微不足道的: if (Math.abs(scoreA - scoreB) < 1)会这样做。

取决于用于分数的变量类型,但本质上是相同的。 如果你正在使用 float,你应该使用 %.0f 或者如果你正在使用 double,你应该使用 %.0d。 我希望是这样并且它有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM