Я думаю, что использование Collections.addAll
просто добавит в набор сам массив, а не его символы. Смотри также this .
import java.util.*;
class a{
static <T> void f(T...a){
System.out.println(a.getClass().getCanonicalName());
System.out.println(a.length);
System.out.println(a[0].getClass().getCanonicalName());
System.out.println();
}
public static void main(String[]args){
f(1,2,3);
f(new int[]{1,2,3});
f(new Integer[]{1,2,3});
}
}
Выход:
java.lang.Integer[]
3
java.lang.Integer
int[][]
1
int[]
java.lang.Integer[]
3
java.lang.Integer
В основном метод переменных аргументов, принимающий универсальный массив, в конечном итоге получит Object...
, реализованный как Object[]
, который не совместим с int[]
, поэтому int[]
будет упакован.
Также это:
for (int i=0; i<hs.size(); i++)
System.out.println(sa[i]);
неправильно. Нет никакой связи между i
и символами в sa
.