【问题标题】:JAVA- Program to check whether the two sets of lists of numbers are the sameJAVA-检查两组数字列表是否相同的程序
【发布时间】:2014-03-21 04:30:01
【问题描述】:

我的程序在内存中生成了两组,我不想将它们写入文件。每组都有一组线。每行都是一系列数字。我想有效地检查这两个文件在java中是否具有相同的行集(java是必须的)。

例如:

set1 :
1 2 3  
3 4 5 6  
1 2 4 5 7  
8  
7  
1 2 4  

set2 :  
7  
3 4 5 6  
1 2 4 5 7  
1 2 3  
8  
1 2 4  

所以,在 set1 和 set2 的情况下,行的集合是相同的,它们只是混乱。因此,对于这两组作为输入,我在 java 中的算法应该返回 true。你能在这方面帮助我吗?我使用哈希表实现了它,但是它用处不大。

【问题讨论】:

  • 如何在内存中存储你的集合?我的意思是你使用什么样的数据结构?
  • 您是否尝试过使用HashSet<String[]>HashSet<List<String>>
  • 对于每个文件,将每一行读取为每行一个 List<Integer>,将这些列表存储在 HashSet 中。那么如果set1.containsAll(set2) && set2.containsAll(set1),你就可以走了。或者,如果您不担心空白差异会导致误报,请将每一行存储为 String
  • 如果列表是动态变化的,即每一行都有新的数字,而一些数字被删除。然后,HashSet 不允许我修改列表。即,我无法检索列表、修改它并将其添加回来。或者我可以这样做吗?

标签: java set intersection


【解决方案1】:

如果你的行是字符串,你可以这样做

List<String> a = new ArrayList<>(Arrays.asList(new String[] { "1 2 3",
                "3 4 5 6", "1 2 4 5 7", "8", "7", "1 2 4" }));
List<String> b = new ArrayList<>(Arrays.asList(new String[] { "7",
                "3 4 5 6", "1 2 4 5 7", "1 2 3", "8", "1 2 4" }));

if (a.size() == b.size()) {
    a.removeAll(b);
    if (a.isEmpty())
        System.out.println("A and B are the same sets");
}

【讨论】:

  • 谢谢。但是,每一行都有数字而不是字符串。每个文件在内存中动态变化。假设每次它发生变化,我该如何更新哈希集?第一次,我创建了列表并将其添加到哈希集中。下次列表更改时,我无法更改列表,因为哈希集不允许我检索列表。我该怎么做。
猜你喜欢
  • 2021-06-21
  • 1970-01-01
  • 2020-05-05
  • 2017-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多