我有兩個問題:
第一:
我有一個函數返回一個HashMap。要讀取返回值,我這樣寫:如何複製hashset和hashmap,以及Java使用指針?
HashMap<Integer,String> hs=my_func2();
我這樣做,如果函數返回一個HashSet。
HashSet<Integer> hs=my_func();
我想知道如果這樣返回的值複製到HS,或者我應該寫了深刻的副本,否則我應該寫這樣的: HashSet的HS =新的HashSet(my_func,並將() ); HashMap hm = new HashMap(my_func2());
第二個問題:
我通過調用make_matrix_funciton來創建一個矩陣。矩陣woule是含有2維數組:
[0 1 1
0 0 0]
然後我給這個矩陣sort_vec,並且在該函數矩陣變化的元件。我認爲java不是基於指針的,所以當我從sort_vec出來時,矩陣應該和原來一樣。但是,它已經改變了!它是
[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;
}
是兩個問題有關嗎?如果不是的話,你應該問他們兩個不同的問題。 – twain249 2012-04-23 23:32:35
我認爲他們可以算作相關的,因爲答案非常相似。 – user3001 2012-04-23 23:33:31
你需要*副本嗎?如果是這樣,你確定嗎? – 2012-04-23 23:34:45