IT/Java

[JAVA] ArrayList 클래스 활용

U_Flix 2024. 5. 30. 19:15

 

이번 포스팅은 Java ArrayList 클래스 기초에 대한 포스팅입니다.

선언부

ArrayList<String> list = null;
list = new ArrayList<String>(); 

// 위 두줄 한번에 선언 및 생성 법
// ArrayList<String> list = new ArrayList<String>();

 

기본적인 선언 및 생성 방법 입니다. ArrayList 뒤 < > 안쪽에는 Type 이 들어가며 사용할 수 있는 모든 타입을 넣을 수 있습니다.

 

ArrayList<기본형> 활용하기

ArrayList 에 값 넣기 - list.add( );

// list.add(타입별 변수 및 값);

//값에 직접 대입
list.add("사과"); // idx 0 List list[0] = "사과"
list.add("포도"); // idx 1 List list[1] = "포도"
list.add("딸기"); // idx 2 List list[2] = "딸기"

// 값에 변수로 대입
String apple = "사과";
	.
        .
        .
list.add(apple);
list.add(변수명);  
list.add(변수명);

 

위 과정을 보면 주석과 같이 배열에 순차적으로 들어가게 됩니다. 지금은 타입이 String 형이기 때문에 저런 방식으로 넣어도 문제되지 않습니다. 다만 다른 타입의 경우 그 타입에 맞는 값을 넣어야 합니다. 다른 타입이 들어가면 당연히 에러가 나기 때문입니다. 

ArrayList 출력하기

// 1. 출력
System.out.println(list.get(0)); // 사과
System.out.println(list.get(1)); // 포도
System.out.println(list.get(2)); // 딸기

// 2. for문
for(int i = 0;i<list.size();i++) {
	System.out.println(list.get(i));
}

// 3. 향상 for문
for (String str : list) {
	System.out.println(str);
}

 

출력 방식은 간단하게 3가지 방식이 있으며 

list.get(인덱스 값) 은 해당 리스트의 인덱스 값으로 출력 해주며 list.size() 는 해당 ArrayList의 크기를 뜻합니다.

이전의 for문을 사용 할 때 배열의  배열변수.length() 길이 처럼 ArrayList의 길이를 size 로 표현합니다.

 

ArrayList 수정하기

// set
list.set(0, "오렌지");
list.set(1, "딸기");
list.set(2, "사과");
list.add(3, "수박");

 

간단한 설명을 더하자면 인자 값은 list.set(인덱스 값, 넣을값) 이다.

ArrayList 삭제하기

// "딸기" 를 삭제하라
// 1. 삭제
list.remove(list.indexOf("딸기"));

// 2. for문
for(int i = 0;i < list.size();i++){
	if(list.get(i).equals("딸기")) {
		list.remove(i);
	}
}
// 3. 향상 for문
for (String str : list) {
	if (str.equals("딸기")) {
		list.remove(list.indexOf("딸기"));
	}	
}

 

1. 삭제

해당 ArrayList.remove() 는 int형 인자값을 넣어줘야 에러가 나지 않는다. 이전 String 내장 함수에서 우리는 .indexOf를 사용 해본적 있을 것이다.

String.indexOf(찾을 값) 는 인자값에 찾을 값을 넣고 값을 찾으면 해당 인덱스를 정수형으로 반환하며

만약 값을 찾지 못했을 경우 -1로 반환한다. 본인은 딸기 값이 있기에 사용합니다.

 

2. for문 삭제

해당 삭제문은 list 를 for문으로 size() 만큼 돌려서 해당 list.get(i) 가 딸기가 맞으면 해당 인덱스로 삭제한다.  

3. 향상 for문

위 for문과 내용은 같다. 순차적으로 확인 후 딸기가 str에 들어갈 때 삭제를 진행한다.

 

ArrayList<객체> 활용하기

혹시나 테스트 해볼 분을 위해 Monitor 클래스도 올립니다 :)

더보기
package kr.co.dong.check5;

public class Monitor {

//	모니터의 총 판매량 : 클래스 변수(필드)
//	인스턴스의 공통 속성인 경우 설정함.
	static int count = 0;

	private String name;
	private String color;
	private String price;
	private String resol;
	boolean onOff;

	public Monitor() {
		System.out.println("모니터 뿅!! ");
		this.count += 1;
	}

	// 모니터 명 색상 가격만 생성 하도록
	public Monitor(String name, String color, String price) {
		this.name = name;
		this.color = color;
		this.price = price;

		this.count += 1;
	}

	// 모니터명 색상 해상도 => 만들 수 없음
//	public Monitor(String color, int price, String resol) {
//		this.color = color;
//		this.price = price;
//		this.resol = resol;
//	}

	void powerOn() {
		System.out.println("전원을 켭니다. ");
		this.onOff = true;
	}

	void powerOff() {
		System.out.println("전원을 끕니다. ");
		this.onOff = false;
	}

//	getter/setter 구현
	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Monitor [name=" + name + ", color=" + color + ", price=" + price;
	}

	public static int getCount() {
		return count;
	}

	public static void setCount(int count) {
		Monitor.count = count;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public String getPrice() {
		return price;
	}

	public void setPrice(String price) {
		this.price = price;
	}

	public String getResol() {
		return resol;
	}

	public void setResol(String resol) {
		this.resol = resol;
	}

	public boolean isOnOff() {
		return onOff;
	}

	public void setOnOff(boolean onOff) {
		this.onOff = onOff;
	}

}
List<Monitor> list = new ArrayList<Monitor>();
Monitor m1 = new Monitor("샘송1", "검은색", "45000");
Monitor m2 = new Monitor("샘송2", "검은색", "35000");
Monitor m3 = new Monitor("샘송3", "검은색", "25000");
Monitor m4 = new Monitor("샘송4", "검은색", "15000");

//list 추가
list.add(m1);
list.add(m2);
list.add(m3);
list.add(m4);

for (Object obj : list) {
	Monitor m = (Monitor) obj;
	System.out.println("모니터 명 : " + m.getName() 
	+ " 색상 : " + m.getColor() + " 가격 : " + m.getPrice());
}
System.out.println(); // 위 for문과 헷갈리지 않기 위해...
for (int i = 0; i < list.size(); i++) {
	Monitor m = list.get(i);
	System.out.println("모니터 명 : " + m.getName() 
	+ " 색상 : " + m.getColor() + " 가격 : " + m.getPrice());
}

 

실행 결과

모니터 명 : 샘송1 색상 : 검은색 가격 : 45000
모니터 명 : 샘송2 색상 : 검은색 가격 : 35000
모니터 명 : 샘송3 색상 : 검은색 가격 : 25000
모니터 명 : 샘송4 색상 : 검은색 가격 : 15000

모니터 명 : 샘송1 색상 : 검은색 가격 : 45000
모니터 명 : 샘송2 색상 : 검은색 가격 : 35000
모니터 명 : 샘송3 색상 : 검은색 가격 : 25000
모니터 명 : 샘송4 색상 : 검은색 가격 : 15000

 

객체 활용 편에서는 해당 객체를 다시 형변환하여 Monitor 타입인 m 으로 순차적으로 모니터 모델을 출력하였습니다.