在多个Java集合中找到最常用的术语?

在多个Java集合中找到最常用的术语?,java,optimization,merge,set,time-complexity,Java,Optimization,Merge,Set,Time Complexity,我理解在集合数组中查找最常用项的原理,即只包含两个集合中包含的项 [5,1,3] [4,2,3] 合并返回3 但是,如果我想知道集合之间可能不包含任何项或不包含任何最常见项的最常见项 如果我有: [5,1,3] [4,2,3] [6,7,8] 我仍然希望3返回,因为它是最常见的项目之间的集合。而合并集合只会返回零,因为3不是其中一个集合中的元素 有人知道一种低时间复杂度的解决方法吗?最简单的方法可能是将这些集合展平到它们的元素,计算每个项目出现的次数,并保存出现最多的一个: Set<I

我理解在集合数组中查找最常用项的原理,即只包含两个集合中包含的项

[5,1,3]
[4,2,3]
合并返回3

但是,如果我想知道集合之间可能不包含任何项或不包含任何最常见项的最常见项

如果我有:

[5,1,3]
[4,2,3]
[6,7,8]
我仍然希望3返回,因为它是最常见的项目之间的集合。而合并集合只会返回零,因为3不是其中一个集合中的元素


有人知道一种低时间复杂度的解决方法吗?

最简单的方法可能是将这些集合展平到它们的元素,计算每个项目出现的次数,并保存出现最多的一个:

Set<Integer> set1 = new HashSet<>(Arrays.asList(5 ,1, 3));
Set<Integer> set2 = new HashSet<>(Arrays.asList(4, 2, 3));
Set<Integer> set3 = new HashSet<>(Arrays.asList(6, 7, 8));

Integer commonItem =
    Stream.of(set1, set2, set3)
          .flatMap(Set::stream)
          .collect(Collectors.groupingBy
                              (Function.identity(), Collectors.counting()))
          .entrySet()
          .stream()
          .sorted(Map.Entry.<Integer, Long> comparingByValue().reversed())
          .findFirst()
          .map(Map.Entry::getKey)
          .orElse(null);
setset1=newhashset(Arrays.asList(5,1,3));
Set set2=新的HashSet(Arrays.asList(4,2,3));
Set set3=新的HashSet(Arrays.asList(6,7,8));
整数公共项=
流(set1、set2、set3)
.flatMap(集合::流)
.collect(收集器.groupingBy
(Function.identity(),collector.counting())
.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue().reversed())
.findFirst()
.map(map.Entry::getKey)
.orElse(空);
注意:
此解决方案生成出现次数最多的单个图元。为了支持领带,您必须对其进行一些调整。

最简单的方法可能是将这些集合展平到它们的元素,计算每个项目出现的次数,并保存出现最多的一个:

Set<Integer> set1 = new HashSet<>(Arrays.asList(5 ,1, 3));
Set<Integer> set2 = new HashSet<>(Arrays.asList(4, 2, 3));
Set<Integer> set3 = new HashSet<>(Arrays.asList(6, 7, 8));

Integer commonItem =
    Stream.of(set1, set2, set3)
          .flatMap(Set::stream)
          .collect(Collectors.groupingBy
                              (Function.identity(), Collectors.counting()))
          .entrySet()
          .stream()
          .sorted(Map.Entry.<Integer, Long> comparingByValue().reversed())
          .findFirst()
          .map(Map.Entry::getKey)
          .orElse(null);
setset1=newhashset(Arrays.asList(5,1,3));
Set set2=新的HashSet(Arrays.asList(4,2,3));
Set set3=新的HashSet(Arrays.asList(6,7,8));
整数公共项=
流(set1、set2、set3)
.flatMap(集合::流)
.collect(收集器.groupingBy
(Function.identity(),collector.counting())
.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue().reversed())
.findFirst()
.map(map.Entry::getKey)
.orElse(空);
注意:
此解决方案生成出现次数最多的单个图元。为了支持ties,您必须对其进行一些调整。

您应该先尝试编写一些代码。您应该先尝试编写一些代码。