如何使用Set.toArray()来排序字符串?

时间:2015-02-20 21:54:36

标签: java arraylist hashset

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

  

帽子里的猫
这只猫坐在垫子上   毯

然后我有一个for循环,它将每行上的每个char与相邻的char配对,并将它们放在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]

我现在的问题是从字符集中取出字符对并进入要排序的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是什么?它好像没有变量名。

3 个答案:

答案 0 :(得分:1)

ArrayList有另一个构造函数,它接受Java Collections子类。所以你可以做shingleArrayList = new ArrayList<>(shingleTrimSet)

如果您只想对集合进行排序,可以使用Collections.sort或只使用TreeSet,使其按照自然顺序排列元素。

答案 1 :(得分:0)

它没有变量名,因为你没有给它一个?

String[] array = shingleTrimSet.toArray( new String[shingleTrimSet.size()] );

但那不是ArrayList,而是一个数组。你可以做到

shingleArrayList.addAll(shingleTrimSet);

也可以在没有副本的情况下工作。

答案 2 :(得分:0)

shingleTrimSet.toArray(new String [shingleTrimSet.size()]);

如果您直接传递新阵列并且不再引用它......那么在那之后你会怎么做?

尝试这样做:

String newString = new String[shingleTrimSet.size()]; and then
shingleTrimSet.toArray( newString );