Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用另一个但不重复的字符串创建新的字符串列表_Java_List - Fatal编程技术网

Java 使用另一个但不重复的字符串创建新的字符串列表

Java 使用另一个但不重复的字符串创建新的字符串列表,java,list,Java,List,我看过多个不同的答案和问题,但似乎没有一个给出我想要的结果。我的问题是,我有一个.txt文件,其中包含426458个状态,不考虑0的规则,并使用如下所示的格式进行交叉 [E][E][E] [E][E][E] [E][E][E] [X][X][X] [O][O][O] [E][E][E] 我使用以下方法加载文件: Scanner sc = new Scanner(new File("src/AllPlayerOneStates.txt")); sc.useDelimiter("\r")

我看过多个不同的答案和问题,但似乎没有一个给出我想要的结果。我的问题是,我有一个.txt文件,其中包含426458个状态,不考虑0的规则,并使用如下所示的格式进行交叉

[E][E][E]
[E][E][E]
[E][E][E]

[X][X][X]
[O][O][O]
[E][E][E]
我使用以下方法加载文件:

Scanner sc = new Scanner(new File("src/AllPlayerOneStates.txt"));
    sc.useDelimiter("\r");
    List<String> lines = new ArrayList<String>();
    while (sc.hasNextLine()) {
      lines.add(sc.next());
    }
这将创建一个列表,其中每个元素都是一个状态,然后我将创建一个没有重复状态的新列表

我曾尝试使用StringBuilder简单地输出所有的唯一状态,但它给出的数字比预期的要少很多,并且循环遍历每个元素并将其与所有其他元素进行比较,但我可能做得不对,因为它告诉我唯一状态的数量大于426458。我对编程比较陌生。

您可以使用Set而不是List,它会自动删除重复项,例如:

Set<String> lines = new HashSet<String>();
while (sc.hasNextLine()) {
  lines.add(sc.next());
}
一旦这个while循环完成,lines.size将为您提供许多唯一的规则

如果要保留顺序,可以使用LinkedHashSet而不是HashSet。

您可以使用Set而不是List,它将删除重复项本身,例如:

Set<String> lines = new HashSet<String>();
while (sc.hasNextLine()) {
  lines.add(sc.next());
}
一旦这个while循环完成,lines.size将为您提供许多唯一的规则

如果要保留顺序,可以使用LinkedHashSet而不是HashSet

这将创建一个数组,其中每个元素都是一个状态 希望创建一个没有重复状态的新数组

请尝试以下方法:

Set<String> set = new HashSet<String>(lines);
List<String> newList = new ArrayList<String>(set);
这里的newList是不包含重复项的新状态列表

这将创建一个数组,其中每个元素都是一个状态 希望创建一个没有重复状态的新数组

请尝试以下方法:

Set<String> set = new HashSet<String>(lines);
List<String> newList = new ArrayList<String>(set);

这里的newList是不包含重复项的新状态列表。

这一定是我格式化文本文件的方式,因为它只给我28个唯一状态的相同结果,而应该有更多的元素。请尝试在添加到集合中时打印每个元素,这可能会让你对添加的内容有更多的了解。只有当equals和hashCode正确比较状态时,你才能得到正确的结果。一行输入真的对应一个状态吗?这就是哈希表在被读入文件后的样子我不完全确定出了什么问题,或者为什么第三或第四个元素的格式不一样。这一定是我格式化文本文件的方式,因为它给了我相同的结果,只有28个唯一的状态,而应该有更多尝试在添加到集合中时打印每个元素,这可能会让您对添加的内容有更多的了解。只有当equals和hashCode正确比较状态时,您才能得到正确的结果。一行输入是否真的对应于单个状态?这就是哈希列表在读入文件后的样子我不完全确定出了什么问题,或者为什么第3或第4个元素的格式不同这会创建一个数组。。。您显示的代码根本不使用数组。很抱歉,我认为它们是一个类似的概念。它们在某些方面是相似的。但数组是一个特定的东西,您的代码不使用这个特定的东西。单词很重要,尤其是JLS中定义精确的单词。这会创建一个数组。。。您显示的代码根本不使用数组。很抱歉,我认为它们是一个类似的概念。它们在某些方面是相似的。但数组是一个特定的东西,您的代码不使用这个特定的东西。词语很重要,尤其是JLS中定义准确的词语。