Java 所有数据类型的转置函数
我在java中有一个函数,它转换2D数组。但是这个函数只需要双[]。有没有一种方法可以让它接受所有类型的数据类型?(我的意思是像一个全局函数一样,接受任何数据类型作为输入并返回该特定数据类型的结果?)我的代码如下:Java 所有数据类型的转置函数,java,arrays,Java,Arrays,我在java中有一个函数,它转换2D数组。但是这个函数只需要双[]。有没有一种方法可以让它接受所有类型的数据类型?(我的意思是像一个全局函数一样,接受任何数据类型作为输入并返回该特定数据类型的结果?)我的代码如下: public static double[][] transpose(double[][] a) { double[][] trans = new double[a[0].length][a.length]; if (a.length > 0)
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;
}
publicstaticdouble[]a转置(double[]a)
{
double[][]trans=新的双精度[a[0]。长度][a.length];
如果(a.长度>0)
{
对于(int i=0;i对于(int j=0;j有一种方法,但我认为这不是很好的方法。您可以将函数的返回类型设置为对象
:
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;
}
公共静态对象[][]转置(对象[][]a)
{
Object[][]trans=新对象[a[0].length][a.length];
如果(a.长度>0)
{
对于(int i=0;i
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;
}
publicstatict[]transpose2DGeneric(T[]a){
T[]trans=a.clone();
对于(int i=0;i
如果我们使用列表而不是普通数组,我们可以得到:
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;
}
公共静态列表transpose2DList(列表a){
List trans=新阵列列表(a);
对于(int i=0;i
因此,您可以使用List,List
…这样的返回方法只能生成一种类型的数据,因此您所描述的是doneya是没有好方法的。因此,我没有其他替代方法可以尝试?您可以创建一个通用方法来处理任何非基本数组,但任何基本数组都需要单独的method.例如,请参见Arrays.copyOf是如何实现的。矩阵转置与线性代数有关,因此它通常被定义为采用双数据类型,因为它是通用的neumeric数据类型。如果您想以字符串矩阵的转置为例,那么最好定义一个处理使用类而不是基元数据types@ManKeer这很有趣。谢谢你……我们将继续努力:)这确实有帮助。这样,我就不必为不同类型的数据使用单独的函数。当然,强制转换和重铸将占用几行代码。但从更大的角度来看,这看起来很有效。谢谢你注意,你不仅仅是强制转换,你还分配了第三个临时数组,并使用它进行了比所需多得多的分配/移动。可能,如果需要效率,最好使用泛型方法并使用反射直接分配类型化数组。
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;
}
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;
}