Web Development/Java

List Collection

seongduck 2022. 10. 8. 10:40
  • java - 리스트컬렉션
  • ArrayList 데이터 추가
  • ArrayList 데이터 가져오기
  • ArrayList 데이터 수정
  • ArrayList 데이터 삭제

1. 개념

  • 데이터를 순차적으로 처리하는 구조이며 인덱스로 관리한다.
  • 객체 자체를 저장하는 것이 아니고 객체의 주소를 참조한다.
  • 객체를 담지 않고 null을 담을 수 있다.
  • 데이터의 중복을 허용한다. (이 경우 동일한 주소를 참조)

2. List 인터페이스의 메소드

  • 객체 추가, 객체 검색, 객체 삭제
기능 메소드 설명
객체 추가 add (Object obj) 객체를 맨 끝에 추가
add (int index, Object obj) 해당 인덱스에 객체를 추가
set (int index, Object obj) 해당 인덱스의 객체가 주어진 객체로 바꿈
객체 검색 contains (Object obj) 해당 객체가 저장되어 있는지 여부를 리턴
get (int index) 해당 인덱스에 저장된 객체 리턴
isEmpty() 컬렉션이 비어 있는지 T/F 조회
size() 저장되어 있는 객체 수 리턴
객체 삭제 clear() 저장된 모든 객체 삭제
remove (int index) 해당 인덱스에 저장된 갹체 삭제
remove (Object obj) 해당 객체를 삭제

3. ArrayList 객체의 내부 구조

  • List 인터페이스의 구현 클래스
  • ArrayList에 객체를 추가하는 순서대로 인덱스 번호가 매겨진다.
  • 배열과 유사한 구조

ex)  ArrayList<데이터 타입> 변수명 = new ArrayList <데이터 타입>(20);

 


4. ArrayList 객체 생성

문법 ArrayList <데이터타입> 변수명 = new ArrayList <데이터타입> ();
예제 ArrayList <Integer> numbers = new ArrayList <Integer> ();
ArrayList <String> fruits = new ArrayList <String> ();
List <Student> students = new ArrayList <Student> ();

5. ArrayList에 데이터 추가

문법 list.add (인덱스_번호, 데이터_값);
list.add (데이터_값);
예제 fruits.add ("키위");
fruits.add (0,"사과");
fruits.add (1, "딸기");

 

package chapter11_1;
import java.util.ArrayList;

public class ArrayListAdditionEx {

	public static void main(String[] args) {
		int number1 = 5;
		int number2 = 10;
		
		ArrayList<Integer> list = new ArrayList<Integer>();
		
		list.add(number1);
		list.add(number2);
		list.add(100);
		list.add(new Integer(25));
		
		System.out.println(list);
	}
}
//출력 형태
[5, 10, 100, 25]

6. ArrayList 데이터 가져오기

문법 데이터_타입 변수명 = list.get (인덱스_번호);
예제 int number = numbers.get (0); //인덱스 0 위치에 있는 값
String name = fruits.get (1); //인덱스 1위치에 있는 "딸기"
int numSize = numbers.size(); //numbers 데이터 개수 
int strSize = fruits.size(); //strings 데이터 개수

 

  • for 문.  for-each 문을 이용하여 데이터 가져오기
package chapter11_1;
import java.util.ArrayList;

public class ArrayListAdditionEx {

	public static void main(String[] args) {
		
		ArrayList<Integer> list = new ArrayList<Integer>();
		
		list.add(100);
		list.add(200);
		list.add(300);
		
        //for문 사용
		for(int inx = 0; inx < list.size(); inx++) {
			System.out.println( list.get(inx));
		}
		
        //for-each문 사용
		for(int number : list) {
			System.out.println(number);
		}
	}
}
//출력 결과
100
200
300

 

예제 1

  • Student class
package chapter11_1;

public class Student {
	private String name;
	private int korean;
	private int english;
	private int math;
	
	public Student(String name, int korean, int english, int math) {
		super();
		this.name = name;
		this.korean = korean;
		this.english = english;
		this.math = math;
	}

	public String getName() {
		return name;
	}

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

	public int getKorean() {
		return korean;
	}

	public void setKorean(int korean) {
		this.korean = korean;
	}

	public int getEnglish() {
		return english;
	}

	public void setEnglish(int english) {
		this.english = english;
	}

	public int getMath() {
		return math;
	}

	public void setMath(int math) {
		this.math = math;
	}
	
	

}

 

  • StudentListTest
package chapter11_1;
import java.util.ArrayList;

public class StudentListTest {

	public static void main(String[] args) {
		ArrayList<Student> students = new ArrayList<Student>();
		
		students.add(new Student("이순신",80,90,95));
		students.add(new Student("김유신",80,90,95));
		students.add(new Student("강감찬",80,90,95));

		for(Student student : students) {
			System.out.println(student.getName() + 
					" -> 국어 : " + student.getKorean() +
					" 영어 : " + student.getEnglish() +
					" 수학 : " + student.getMath());
		}
	}
}

 

//출력 결과
이순신 -> 국어 : 80 영어 : 90 수학 : 95
김유신 -> 국어 : 80 영어 : 90 수학 : 95
강감찬 -> 국어 : 80 영어 : 90 수학 : 95

예제 2

  • Book class
package chapter11_1;

public class Book {
	private String book_name;
	private int page;
	private int price;
	
	public Book(String book_name, int page, int price) {
		super();
		this.book_name = book_name;
		this.page = page;
		this.price = price;
	}
	public String getBook_name() {
		return book_name;
	}
	public void setBook_name(String book_name) {
		this.book_name = book_name;
	}
	public int getPage() {
		return page;
	}
	public void setPage(int page) {
		this.page = page;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	
	public void result() {
		System.out.println(book_name + "( " + page + " page) : " + price + "원");
	}
	
	

}

 

  • BookListTest Class
package chapter11_1;
import java.util.ArrayList;

public class BookListTest {

	public static void main(String[] args) {
		ArrayList<Book> book = new ArrayList<Book>();
		
		book.add(new Book("Jaba의 정석",346,15000));
		book.add(new Book("Database 마스터",560,18000));
		book.add(new Book("Python 따라하기",271,12000));
		
		for(Book books : book) {
			books.result();
		}
	}
}
//출력 결과
Jaba의 정석( 346 page) : 15000원
Database 마스터( 560 page) : 18000원
Python 따라하기( 271 page) : 12000원

7. ArrayList 데이터 내용 교체

문법 list.set (인덱스_번호, 교체할_값);
예제 fruits.add ("포도");
fruits.add ("딸기");
fruits.set (0, "망고"); //인덱스 0번째 데이터를 포도에서 -> "망고"로 변경

 

package chapter11_1;
import java.util.ArrayList;

public class ArrayListAdditionEx {

	public static void main(String[] args) {
		
		ArrayList<Integer> list = new ArrayList<Integer>();
		
		list.add(100);
		list.add(200);
		list.add(300);
		
		list.set(1,250); //첫 번째 인덱스의 값을 250으로 변경
		System.out.println(list);
	}
}
//출력 결과
[100, 250, 300]

8. ArrayList 데이터 삭제

문법 list.remove (인덱스_번호);
list.remove( 데이터_값 );
예제 fruits.add ("키위");
fruits.remove (1); //인덱스 1위치의 데이터 삭제
fruits.remove ("망고"); //리스트에서 "망고"데이터를 찾아 삭제

 

주의

<Integer>의 경우 파라미터 값인지 인덱스 값인지 혼동하기 쉽다.

우선적으로 인덱스 값을 우선시하므로 주의해야한다.

ex) list.remove(10);

  • 10이라는 파라미터 삭제가 아니라 10번째 인덱스를 지운다 라는 의미

 

package chapter11_1;
import java.util.ArrayList;

public class ArrayListAdditionEx {

	public static void main(String[] args) {
		
		ArrayList<Integer> list = new ArrayList<Integer>();
		
		list.add(100);
		list.add(200);
		list.add(300);
		
		list.remove(1);	//첫 번째 인덱스의 값을 삭제
		System.out.println(list);
	}
}
//출력 결과
[100, 300]

실습

  • 이순신 학생의 영어 성적이 90점에서 92점으로 변경되었다.
  • 김유신 학생은 전학을 가게되어 리스트에서 빠지게 되었다.
students.get(0).setEnglish(92);		//영어 점수 상승
students.remove(2); 			//강감찬 전학
  • 0번째 (이순신)의 영어 점수를 92점으로 변경한다.
  • 2번째 인덱스(강감찬)을 삭제한다.

'Web Development > Java' 카테고리의 다른 글

예외 처리 - 사용자 정의 예외  (0) 2022.10.11
예외 처리 - throws 구문  (0) 2022.10.11
예외처리 try ~ catch ~ finally 구문  (0) 2022.10.11
HashMap  (0) 2022.10.08