본문 바로가기
CLASS/JAVA

#6-2 / class배열(ArrayList)

by eungSe__ 2024. 5. 8.

ArrayList<String> al = new ArrayList<String>();

ArrayList<Integer> al2 = new ArrayList<Integer>(); //int 사용 불가

 

기존 원시배열은 데이터 추가,수정,삭제 불가능하단 단점이 있다 -> class배열이 나옴(라이브러리 사용)

class배열에는 [] 선언도, 기능도 없다

<>에 자료형은 사용할 수 없다

⚡ 타이틀

- add : 배열에 데이터를 추가

- remove : 배열에 데이터 삭제(단, 데이터 삭제시 배열번호 변경됨)

- size() : 배열의 데이터 갯수(원시배열의 length와 같은 기능)

- clear() : 모든 데이터 삭제

- clone() : 클래스 배열을 복사(추가,삭제 모두 가능)

package oop;

import java.util.ArrayList;

//클래스 ArrayList 배열
public class array10 {

	public static void main(String[] args) {
		ay10_box ay = new ay10_box();
		ay.abc();

	}

}

class ay10_box {
	public void abc() {
		//문자열 타입의 빈 클래스 배열 선언문
		ArrayList<String> al = new ArrayList<String>();
		
		al.add("홍길동"); 
		al.add("강감찬");
		al.add("유관순");
		al.add("이산");
		al.add("이순신");
		
		System.out.println(al.get(3)); //이산
		
		System.out.println(al); //[홍길동, 강감찬, 유관순, 이산, 이순신]
		al.add("장보고");
		System.out.println(al); //[홍길동, 강감찬, 유관순, 이산, 이순신, 장보고]
		al.remove(0);
		System.out.println(al); 
		//[강감찬, 유관순, 이산, 이순신, 장보고], 감감찬 node번호 0번으로 변경(밀림)
		
		int ea = al.size(); 
		System.out.println(ea); //5
		
		al.clear();
		System.out.println(al); //[]
	}
}


🔽 클래스배열 복사

ArrayList<Integer> al2 = new ArrayList<Integer>(); //빈배열
al2.add(5);
al2.add(1);
al2.add(8);
System.out.println(al2); //[5, 1, 8]

ArrayList<Integer> al3 = (ArrayList)al2.clone(); //빈배열
al3.add(10);
al3.add(20);
System.out.println(al3); //[5, 1, 8, 10, 20]
⚡ 원시 배열을 클래스 배열로 변환

-원시배열을 직접 사이트에 출력시키는 경우는 거의 없다
(대부분 원시배열->클래스배열로 변환 후사용)

Arrays.asList(원시배열) : 원시 배열값을 클래스로 변환하는 메소드
set() : 해당 배열 번호에 데이터 수정
package oop;

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

public class array11 {
	public static void main(String[] args) {
		Integer data[] = {10,20,30,40,50}; //class배열에 삽입시 자료형사용 x
		ArrayList<Integer> al = new ArrayList<Integer>(Arrays.asList(data));
		System.out.println(al); //[10, 20, 30, 40, 50]
		
		al.add(60);
		al.add(70);
		System.out.println(al); //[10, 20, 30, 40, 50, 60, 70]

		//--반복문을 이용한 데이터 출력
		ArrayList<String> al2 = new ArrayList<String>();
		al2.add("HTML/CSS");
		al2.add("Javascript 기초");
		al2.add("Java OOP");
		System.out.println(al2); //[HTML/CSS, Javascript 기초, Java OOP]
	
		int w=0;
		while( w<al2.size() ) {
			System.out.println(al2.get(w)); //a12데이터 한줄씩 출력
			w++;
		}
		
		al2.set(1, "Ajax 기초");
		System.out.println(al2); //[HTML/CSS, Ajax 기초, Java OOP]

	}

}

 

⚡ 메모리 할당관련(지금은 자세히 알필요 x)
window-preferences - show heap status
작업하면서 현재 메모리 얼마나 쓰는지 알 수 있음
//메모리 할당 클래스 배열 (5517개 이상은 에러)
ArrayList<Integer> al2 = new ArrayList<Integer>(10);
int w = 0;
while(w<550) {
    al2.add(w); 
    w++;
}
System.out.println(al2); 
//sysout 출력안됨 - 기본 할당 메모리를 초과해서(w<5518까진 들어감)
 //메모리 변경 가능 - 자바버전별로 방식이 다름

 

⚡ 원시배열 -> 클래스 배열 이관 후 정렬

Collections.sort(클래스배열) : 오름차순 정렬 방식
Collections.sort(클래스배열,Collections.reverseOrder()) : 내림차순 정렬방식
=>Collection 라이브러리 사용
package oop;

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

public class array12 {

	public static void main(String[] args) {
		//-- 원시배열 이관
		Integer data[] = {3,6,1,9,8,7,10,2}; //이관 후엔 더이상 손댈일 x
		ArrayList<Integer> al = new ArrayList<Integer>(Arrays.asList(data));
		
		//- 숫자 오름차순,내림차순
		Collections.sort(al);
		System.out.println(al); //[1, 2, 3, 6, 7, 8, 9, 10] 오름차순
		
		Collections.sort(al,Collections.reverseOrder());
		System.out.println(al); //[10, 9, 8, 7, 6, 3, 2, 1] 내림차순 정렬
		
		//- 문자 오름차순,내림차순
		String user[] = {"최하영","이윤석","김단희","하현수","김지현"};
		ArrayList<String> al2 = new ArrayList<String>(Arrays.asList(user));
		
		Collections.sort(al2);
		System.out.println(al2);//[김단희, 김지현, 이윤석, 최하영, 하현수]
		Collections.sort(al2,Collections.reverseOrder());
		System.out.println(al2);//[하현수, 최하영, 이윤석, 김지현, 김단희]
        
		//- 원시배열 데이터 정렬
		Integer adata[] = {5,10,3,1,7,6,2};
		Arrays.sort(adata); //원시배열 오름차순
		System.out.println(Arrays.toString(adata));
		
		Arrays.sort(adata,Collections.reverseOrder()); //원시배열 내림차순
		System.out.println(Arrays.toString(adata));
   
	}
}


🔽 응용문제1

package oop;

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

public class array13 {

	public static void main(String[] args) {
		/*
		 다음 배열 데이터를 이용하여 
		 결과와 동일하게 출력되도록 코드를 작성하시오.
		 
		 1번데이터 : 100,55,67,90,13,7
		 2번데이터 : 9,16,22,31
		 
		 결과 : [100,90,67,55,31,22,16,13,9,7]
		 */
		
		Integer a[] = {100,55,67,90,13,7};
		Integer b[] = {9,16,22,31};
		
		ArrayList<Integer> ar = new ArrayList<Integer>(Arrays.asList(a));
		
		//-- 세은풀이
		int f;
		for(f=0; f<b.length; f++) {
			ar.add(b[f]);
		}
		Collections.sort(ar,Collections.reverseOrder());
		System.out.println(ar);
		
		//-- 선생님풀이
		ArrayList<Integer> al = new ArrayList<Integer>(Arrays.asList(a));
		ArrayList<Integer> al2 = new ArrayList<Integer>(Arrays.asList(b));
		al.addAll(al2); //al에 모든 al2를 더해라
		Collections.sort(al,Collections.reverseOrder());
		System.out.println(al);
	
	}

}


🔽 응용문제2

package oop;

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

public class array13 {
	public static void main(String[] args) {
		/*
		 응용문제 풀어두 대구 안풀어두대구~
		 
		 다음 배열 데이터를 확인 후 홀수 데이터만 출력을 해야합니다.
		 단,홀수 데이터는 올림차순 정렬로 결과가 출력되도록 코드를 작성하시오.
		 
		 {10,16,9,7,31,45,27,94,86,87,112,100,3}
		 
		 결과 : 3,7,9,27,31,45,87
		 
		 */
		Integer aa[] = {10,16,9,7,31,45,27,94,86,87,112,100,3};
		ArrayList<Integer> aaList = new ArrayList<Integer>(Arrays.asList(aa));
		
		ArrayList<Integer> aa_1 = new ArrayList<Integer>();
		
		int aal;
		for(aal=0; aal<aaList.size(); aal++) {
			if(aaList.get(aal)%2 == 1) { //홀수
				aa_1.add(aaList.get(aal));
			}
		}
		Collections.sort(aa_1);

		System.out.println(aa_1); //[3, 7, 9, 27, 31, 45, 87]
	}

}

 

 

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

#7-1 / 주의  (0) 2024.05.09
#6-3 / 2차 class 배열  (0) 2024.05.08
#6-1 / 데이터 반환,외부 원시배열 데이터 반환  (0) 2024.05.08
#5-3 / 다차원 배열,return 메소드로 배열받기  (0) 2024.05.07
#5-2 / 2차 원시 배열  (0) 2024.05.07