java - 如何使用 Set.toArray() 对字符串进行排序?

标签 java arraylist hashset

我找到了许多将 Set 转换为 ArrayList 的答案,但没有一个真正能解决我的问题。我这里有一个程序,它从 file.txt 读取并使用杰卡德相似矩阵确定句子之间的相似程度。 file.txt中的内容如下:

The cat in the hat
The cat sat on the mat
Pigs in a blanket

然后,我有一个 for 循环,将每行上的每个字符与相邻字符配对,并将它们放入 HashSet 中以确保唯一性。就像这样:

[ c, in, h, i, t , n , at, Th, t, th, ha, e , he, ca]
[ c, t , m, sa, o, n , at, s, Th, t, th, ma, e , he, ca, on]
[ a, b, in, i, bl, gs, s , an, et, n , la, Pi, ke, nk, ig, a ]

我现在的问题是将字符对从 Set 中取出并放入要排序的 ArrayList 中,然后使用 String.equals() 作为 Jaccard 公式,将一行中的每一对与另一行上的另一对字符进行比较: J = 匹配数/唯一对。我有一个 Set,在填充第一行后会被回收。

    HashSet<String> shingleTrimSet = new HashSet<String>();
    List<String> shingleArrayList = new ArrayList<String>();

    System.out.println("\nSorted Shingles:");

    for(int i = 0; i < lineCount; i++){
        shingleTrimSet.clear();

        for(int idx = 0, jdx = 1; idx+1 < lines[i].length(); idx++, jdx++){
            shingleTrimSet.add( lines[i].substring( idx, jdx+1 ) );
        }
        shingleTrimSet.toArray( new String[shingleTrimSet.size()] );

    }

shingleTrimSet.toArray( new String[shingleTrimSet.size()] ) 在这种情况下有效,但我不知道以后如何将它用于其他用途。我如何知道 Set 已放入哪个 ArrayList 中?它似乎没有变量名。

最佳答案

ArrayList 还有另一个采用 Java Collections 子类的构造函数。所以你可以这样做shingleArrayList = new ArrayList<>(shingleTrimSet)

如果您只想对集合进行排序,可以使用 Collections.sort或者只是使用 TreeSet 来保持元素按自然顺序排序。

关于java - 如何使用 Set.toArray() 对字符串进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28638894/

相关文章:

java - ArrayList 与 HashSet 的性能对比

Java多重继承,摆脱重复代码

java - 将整数拆分为数字的最快方法是什么?

java - 将txt文件的不同行读取到不同的ArrayList中

java - 通过部分用户输入JAVA搜索数组列表

java - HashSet 'add'方法什么时候调用equals?

java - Java LinkedHashSet 包含方法的问题

java - PL/SQL Developer 中是否有类似于 "..."-Buttons 的 Java Swing 组件?

java - Java 中初始化的奇怪行为

java - 更改字符串中某个字母的出现次数