본문 바로가기
CLASS/JAVA

#7-1 / 주의

by hingu 2024. 5. 9.
⚡ 주의
*  sort 사용 시 주의사항 : 반복문에 new오브젝트 사용시 할당량을 확인해야함
*  반복문 사용시 1차배열 생성이 중요하다. 또한, 2차배열도 반복문 안과 밖에 따라 다른 결과가 출력 될 수 있다
* 2차 및 다차원 배열시 sort를 1차배열 형태에 적용하면 추가 2차배열 및 다차원 배열 모두 동일하게 적용된다
( 2차배열엔 sort하지 않는게 좋다! )

package oop;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class web1 {
	public static void main(String[] args) {
		//-- sort 사용 시 주의사항 : 반복문에 new오브젝트 사용시 할당량을 확인해야함
		
		Integer a[] = {5,10,8,4,2};
		ArrayList<Integer> arr1 = null;
		ArrayList<Integer> arr2 = new ArrayList<Integer>();
		
		int w=0;
		while(w<a.length) {
			arr1 = new ArrayList<Integer>(); 
			arr1.add(a[w]);
			arr2.add(arr1.get(0));
			w++;
		}
		Collections.sort(arr1);
		System.out.println(arr1); //[2] 이상함 - 반복문에서 new사용으로 arr1값이 리셋됨
		System.out.println(arr2); //[5, 10, 8, 4, 2]
		
		//-- 1차=>2차배열 
		//: 반복문 사용시 1차배열 생성이 중요하다. 
		//또한, 2차배열도 반복문 안과 밖에 따라 다른 결과가 출력 될 수 있다
		String user[][] = {
				{"hong","kim","park"},
				{"21","16","33"}
		};
		
		ArrayList<ArrayList<String>> all = new ArrayList<ArrayList<String>>();
		ArrayList<ArrayList<String>> all2 = new ArrayList<ArrayList<String>>();
		ArrayList<String> al = null;
		int f;
		for(f=0; f<user[0].length; f++) { //3
			al = new ArrayList<String>(); //new-1차배열 생성(리셋됨)
			al.add(user[0][f]);
			al.add(user[1][f]);
			all.add(al);
			all2.add(al);
		}
		
		System.out.println(all); //[[hong, 21], [kim, 16], [park, 33]]
		
		Collections.sort(all.get(0)); //0번째것만 sort햇는데 all2도 sort됨
		System.out.println(all); //[[21, hong], [kim, 16], [park, 33]]
		System.out.println(all2); //[[21, hong], [kim, 16], [park, 33]]
		//2차배열엔 sort하지 않는게 좋다!
		  //2차 및 다차원 배열시 sort를 1차배열 형태에 적용하면
		    //추가 2차배열 및 다차원 배열 모두 동일하게 적용된다	
	}
}

 

⚡ 2차 class 배열을 이용한 정렬방식
package oop;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

//2차 class 배열을 이용한 정렬방식
public class web2 {

	public static void main(String[] args) {
		//나이 오름차순에 따른 2차배열 정렬
		final String a[][] = {
				{"김남주","윤보미","정은지"},
				{"21","19","24"}
		};
		
		ArrayList<String> all = new ArrayList<String>(Arrays.asList(a[1])); //나이만 가져옴
		Collections.sort(all);
		//System.out.println(all);
		
		//--- 최종 결과 데이터 배열
		ArrayList<ArrayList<String>> all2 = new ArrayList<ArrayList<String>>();
		int ww=0;
		while(ww<a.length) {  //2
			ArrayList<String> mb = new ArrayList<String>();
			
			int z=0;
			while(z<a[0].length) { //3
				String node = all.get(z);
                
				//원시배열을 가상 클래스화하여 IndexOf로 위치를 파악(배열번호 위치)
				//(Arrays.asList(a[1]) : 가상 상 클래스화)
				int ck = Arrays.asList(a[1]).indexOf(node); 
				//indexOf는 무조건 숫자로, -1 : 단어 없음
                
				mb.add(a[ww][ck]);
				//System.out.println(node);
				//System.out.println(ck);
				z++;
			}
			all2.add(mb); //최종 결과 데이터를 그룹 순서에 맞게 적용
			ww++;
		}
		System.out.println(all2); //[[윤보미, 김남주, 정은지], [19, 21, 24]]
	}
}

 

 

'CLASS > JAVA' 카테고리의 다른 글

#7-3 / LinkedList 클래스 배열  (0) 2024.05.09
#7-2 / getter,setter  (0) 2024.05.09
#6-3 / 2차 class 배열  (0) 2024.05.08
#6-2 / class배열(ArrayList)  (0) 2024.05.08
#6-1 / 데이터 반환,외부 원시배열 데이터 반환  (0) 2024.05.08