Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 所有数据类型的转置函数_Java_Arrays - Fatal编程技术网

Java 所有数据类型的转置函数

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)

我在java中有一个函数,它转换2D数组。但是这个函数只需要双[]。有没有一种方法可以让它接受所有类型的数据类型?(我的意思是像一个全局函数一样,接受任何数据类型作为输入并返回该特定数据类型的结果?)我的代码如下:

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;
}