質問が 2 つあります。
まず
、HashMap を返す関数があります。戻り値を読み取るには、次のように記述します。
HashMap<Integer,String> hs=my_func2();
関数が HashSet を返す場合も同じことを行います。
HashSet<Integer> hs=my_func();
このようにして返された値が hs にコピーされるのか、それともディープ コピーを作成する必要があるのか、それとも次のように作成する必要があるのかを知りたかったのです。HashMap hm=new HashMap(my_func2());
2 番目の質問: make_matrix_funciton
を呼び出して行列を作成します。
[0 1 1
0 0 0
0 0 0]次に、この行列をsort_vec
に渡すと、この関数で行列の要素が変化します。Java はポインター ベースではないと思うので、sort_vec を終了すると、マトリックスは元どおりになるはずです。しかし、それは変わりました!
[0 0 0
0 0 0
1 1 0]は
、sort_vec 関数内で適用された変更を示しています。それは正常ですか、そうであれば、それを防ぐために何をすべきですか. 以下のコードはコンパイル可能です。
public static void main(String args[]) {
int matrix[][]=new int[3][3];
matrix=make_matrix("011000000");
int indexes[]={2,1,0};
int[][] mat=sort_vec(3,matrix,indexes);
}
private static int[][] sort_vec(int motifsize,int [][]mat,int[] indexes)
{
int[] main_index={0,1,2};
int l=indexes.length;
for (Integer i=0;i<l;i++)
if(indexes[i]!=main_index[i])
{
int j=indexes[i];
int k=main_index[i+1];
for(;k<l;k++)
if(indexes[k]==main_index[i])
break;
indexes[k]=j;
mat=exchange(motifsize,mat,j,main_index[i]);
}
return mat;
}
private static int[][] exchange(int motifsize,int [][]matrix,int x,int y)
{
int temp;
for(int i=0;i<motifsize;i++)
{
temp=matrix[i][x];
matrix[i][x]=matrix[i][y];
matrix[i][y]=temp;
}
for(int i=0;i<motifsize;i++)
{
temp=matrix[x][i];
matrix[x][i]=matrix[y][i];
matrix[y][i]=temp;
}
return matrix;
}
private static int[][] make_matrix(String id)
{
int matrix[][]=new int[3][3];
int c=0;
for(int x=0;x<3;x++)
for(int y=0;y<3;y++)
{
if(id.charAt(c)=='1' || id.charAt(c)=='5')
matrix[x][y]=1;
c++;
}
return matrix;
}