본문 바로가기

IT

19. 자바 - List 컬렉션 기초

* Collection

List : 순차형 집합,

Map : 비정형 집합

Set : 중복은 허용, 순서x

 

- 자바 프로그램에서 객체를 객체들의 모음 형식으로 관리할 수 있는 방법을 제공하는 클래스들을 컬렉션이라고 부른다.

- 컬렉션은 배열과 유사하지만 데이터를 저장/조회/수정/삭제하는 작업을 쉽게 처리할 수 있으며, 동적인 크기를 갖느나는 장점이 있다.

- 컬렉션 게열은 set/List/Map 등의 인터페이스가 있으며 이를 구현한 클래스를 이용하면 객체들을 모음저장할 수 있다.

 

* List 컬렉션

-List 컬렉션은 객체를 인덱스로 관리하기 때문에 객체를 저장하면 자동으로 인덱스 번호가 부여되고 인덱스를 통해 객체를 검색, 삭제할 수 있는 기능을 제공합니다.

- List는 객체를 순서대로 저장하며 동일한 객체를 중복 저장할 수 있다.

 

* List 계열 주요 메서드

1. add(E, e) : 주어진 객체를 List의 맨 끝부분에 추가.

2. add(int index, E, e) : 주어진 인덱스에 객체를 추가

3. set(int index, E, e) : 주어진 인덱스에 저장된 객체를 주어진 객체로 바꿈

 

- 객체 검색 기능

1. contain(Object o) : 주어진 객체가 저장되어있는지의 여부를 판단.

2. get(int index) :  주어진 인덱스에 저장되어 있는 객체를 리턴.

3. isEmpty() : 컬렉션이 비어있는지의 여부를 판단.

4. size() : 저장되어 있는 전체 객체 수를 리턴.

 

- 객체 삭제 기능

1. clear() : 저장된 모든 객체를 삭제.

2. remove(int index) : 주어진 인덱스에 저장된 객체를 삭제.

3. remove(Object o) : 주어진 객체를 삭제

 

package collection.list;

import java.util.*;

public class ArrayListExample {

	public static void main(String[] args) {
		
		//ArrayList 객체 생성.
		//제네릭(generic) : 타입의 안정화를 위해 객체 내부에 저장되는 타입을
		//일치시키는 방법  (1.8 이하 버전은 뒤에도 <>안에 String를 써줘야한다.)
		ArrayList<String> list = new ArrayList<>();
		
		String str1 = "Java";
		String str2 = "JSP";
		
		System.out.println(list);
		
		//list에 객체를 저장하는 메서드 add() : 데이터를 맨 끝에 추가
		list.add(str1);
		list.add(str2);
		list.add("DataBase");
		list.add("JDBC");
		list.add("JSP"); //list는 객체의 중복 저장을 허용.
		
		System.out.println(list); // 순서대로 저장된다.
		
		//list에 저장된 총 객체 수 얻기 size()
		int size = list.size();
		System.out.println("list에 저장된 총 객체 수 " + size);
		
		//list에 객체 삽입 add(index, 객체): 데이터를 해당 인덱스에 삽입.
				list.add(2, "Oracle");
				System.out.println(list);
				
//			list[3] = "MySQL"; (X) 에러발생 바로 삽입하면 안된다.
				
		//list 데이터 수정 set(index, 객체)
		list.set(3, "MySQL");
		System.out.println(list);
				
		//list 내부 객체 가져오기 get(index)
		String s = list.get(2); // 제네릭에 문자열을 저장했기때문에 문자열로 받음.
		System.out.println("2번 인덱스 객체: " + s);
		
		//list에 저장된 객체의 인덱스번호 확인하기 indexOf(객체)
		int idx = list.indexOf("MySQL");
		System.out.println("MySQL이 저장된 인덱스: " + idx);
				
		//indexOf는 객체를 검색하지 못했을 경우 -1을 리턴합니다.
		idx = list.indexOf("안녕~~");
		System.out.println(idx);
				
		//list에서 객체데이터 삭제 remove(index), remove(obj)
		list.remove(5);
		System.out.println(list);		
		
		list.remove(str1);
		System.out.println(list);
		
		//list내부에 저장된 객체의 유무확인 contains()
		System.out.println(list.contains("JSP"));
		System.out.println(list.contains(str2));
		System.out.println(list.contains("바보야!"));
		
		//list의 반복문 처리
		System.out.println("--------------------------");
		for(int i=0; i<list.size(); i++) {
			System.out.println(list.get(i));
		}
		System.out.println("--------------------------");
		for(String str : list) {
			System.out.println(str);
		}
		
		//list 내부 객체 전체 삭제 clear()
		list.clear();
		System.out.println(list);
		
		//list내부 데이터가 전부 비어있는지 확인하는 메서드 isEmpty()
		if(list.isEmpty()) {
			System.out.println("list가 비어있음.");
		}else {
			System.out.println("list가 비어있지 않음.");			
		}
	}
}
--------------결과-------------
[]
[Java, JSP, DataBase, JDBC, JSP]
list에 저장된 총 객체 수 5
[Java, JSP, Oracle, DataBase, JDBC, JSP]
[Java, JSP, Oracle, MySQL, JDBC, JSP]
2번 인덱스 객체: Oracle
MySQL이 저장된 인덱스: 3
-1
[Java, JSP, Oracle, MySQL, JDBC]
[JSP, Oracle, MySQL, JDBC]
true
true
false
--------------------------
JSP
Oracle
MySQL
JDBC
--------------------------
JSP
Oracle
MySQL
JDBC
[]
list가 비어있음.

추가.

linkedList가 있는데 이것만 조금더 알아보자. ArrayList와 거의 동일하다.

사용법은 똑같다.

List<> list = new ArrayList<>();

List<> list = new LinkedList<>();

 

그럼 차이는 멀까?

ArrayList는 중간데이터를 삭제 시 뒤에있는 데이터들이 다 앞으로 한칸씩 땡겨온다.

그래서 중간 데이터의 삭제나 삽입이 빈번하게 발생될경우 메모리 속도가 매우 느려진다.

linkedList는 중간 데이터를 삭제하거나 삽입해도 그 자리의 데이터만 삭제되고 줄로 다시 이어지기 때문에 속도가 느려지는 현상은 발생되지 않는다.

 

 

 

 

 

'IT' 카테고리의 다른 글

20. 자바 - set, Map 컬렉션  (0) 2022.10.07
16-1. 자바 예외처리 - try ~ catch  (1) 2022.10.06
18. 자바 - java.util 패키지  (0) 2022.10.05
17-1. 자바 -예외처리 long 패키지  (1) 2022.10.04
14. 자바 - 다형성  (0) 2022.09.28