我有两个问题:
首先:
我有一个返回 HashMap 的函数。为了读取返回值,我这样写:
HashMap<Integer,String> hs=my_func2();
如果函数返回一个 HashSet,我也会这样做。
HashSet<Integer> hs=my_func();
我想知道是否以这种方式将返回的值复制到hs中,或者我应该为它写一个深拷贝,或者我应该这样写:HashSet hs=new HashSet(my_func()); HashMap hm=new HashMap(my_func2());
第二个问题:
我通过调用 make_matrix_funciton 创建一个矩阵。矩阵woule 是一个二维数组,包含:
[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;
}