我找到了将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是什么?它好像没有变量名。
答案 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 );