두 가지 질문이 있습니다.
먼저 :
HashMap을 반환하는 함수가 있습니다. 반환 값을 읽으려면,이처럼 쓰기 함수가 HashSet의를 반환하는 경우해시 세트와 해시 맵을 복사하는 방법과 Java에서 포인터를 사용합니까?
HashMap<Integer,String> hs=my_func2();
나도 같은 않습니다.
HashSet<Integer> hs=my_func();
내가 이런 식으로 반환 된 값은 HS에 복사하는 경우 알고 싶어, 아니면 그것을 위해 깊은 사본을 작성해야하거나 내가 이런 식으로 작성해야 : HashSet에의 HS = 새로운 HashSet의 (my_func을()); HashMap hm = 새로운 HashMap (my_func2());
두 번째 질문 :
make_matrix_funciton을 호출하여 행렬을 만듭니다. 매트릭스를 포함하는 2 차원 배열이 woule :
[
0 0 0 0 1 1
0 0 0 다음에 I가 sort_vec이 매트릭스를 제공하고, 매트릭스의 변화의 기능의 요소. 나는 자바가 포인터 기반이 아니라고 생각한다. 그래서 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;
}
이 두 가지 질문이 있습니까 전혀 관련이 없습니까? 그렇지 않으면 두 가지 질문으로 질문해야합니다. – twain249
나는 대답이 매우 유사하기 때문에 그들이 관련성을 가질 수 있다고 생각한다. – user3001
사본이 필요하십니까? 그렇다면, 확실합니까? –