我在java中有一个函数,用于转换2D数组。但是这个函数只需要double [] []。有没有办法让它采用所有类型的数据类型?(我的意思是像一个全局函数,它接受任何数据类型作为输入并返回特定数据类型的结果?)我的代码如下:
public static double[][] transpose(double[][] a)
{
double[][] trans = new double[a[0].length][a.length];
if (a.length > 0)
{
for( int i = 0; i < a[0].length; i++)
{
for(int j=0; j<a.length; j++)
{
trans[i][j] = a[j][i];
}
}
}return trans;
}
答案 0 :(得分:1)
有一种方法,但我认为这样做并不好。您可以将函数的返回类型设为Object
:
public static Object[][] transpose(Object[][] a)
{
Object[][] trans = new Object[a[0].length][a.length];
if (a.length > 0)
{
for( int i = 0; i < a[0].length; i++)
{
for(int j=0; j<a.length; j++)
{
trans[i][j] = a[j][i];
}
}
}
return trans;
}
您可以通过将数组转换为Object数组并将其提供给函数来使用此方法:
int[][] multi = new int[][] { { 1, 2 }, { 3, 4 }, { 5, 5 }, { 7, 6 }, { 9, 8 } };
Object[][] o = new Object[multi[0].length][multi.length];
for (int i = 0; i < multi[0].length; i++) {
for (int j = 0; j < multi.length; j++) {
o[i][j] = multi[j][i];
}
}
transpose(o);
但请注意,您还必须向后转换返回值:
Object[][] returnValue = transpose(o);
int[][] multiTransposed = new int[returnValue[0].length][returnValue.length];
for (int i = 0; i < returnValue[0].length; i++) {
for (int j = 0; j < returnValue.length; j++) {
multiTransposed[i][j] = (int)returnValue[j][i];
}
}
这是一个有点棘手的工作。在提供功能之前,您始终必须知道阵列的数据类型。在我的例子中,它是int
。
希望有所帮助!
答案 1 :(得分:1)
使用泛型:
public static <T> T[][] transpose2DGeneric(T[][] a) {
T[][] trans = a.clone();
for (int i = 0; i < a[0].length; i++) {
for (int j = 0; j < a.length; j++) {
trans[i][j] = a[j][i];
}
}
return trans;
}
如果我们使用Lists而不是普通数组,我们可以得到:
public static <T> List<List<T>> transpose2DList(List<List<T>> a) {
List<List<T>> trans = new ArrayList<List<T>>(a);
for (int i = 0; i < a.size(); i++) {
for (int j = 0; j < a.get(i).size(); j++) {
trans.get(i).set(j, a.get(j).get(i));
}
}
return trans;
}
所以你可以使用List<List<Integer>>, List<List<Double>>
...