package ex0729;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/*
 - List 인터페이스
 	: 순서가 있다.
 	: 배열과 유사한 구조
 	: 가변 길이(저장 공간이 부족하면 자동으로 공간이 늘어남)
 	: 중복적인 요소도 추가 가능
 	: 중간에 데이터를 추가하거나 삭제도 가능
 	: 주요 구현 클래스 - ArrayList, Vector, LinkedList, Stack 등..
 	: 동기화 지원 : Vector - 다중 스레드 환경에서 안전
 	: 동기화 지원 안함 : AraayList, LinkedList - 다중 스레드 환경에서 안전하지 않음(속도 빠름)
 */
public class Ex001_List {
	public static void main(String[] args) {

		List<String> list = new ArrayList<String>(); // up casting
		String s;

		// 마지막에 요소 추가
		list.add("서울");
		list.add("부산");
		list.add("인천");
		list.add("광주");
		list.add("서울"); // 요소의 중복 가능
		list.add("대전");

		System.out.println(list);

		// 2인덱스에 데이터 추가
		list.add(2, "대구");
		System.out.println(list);

		// 데이터 개수 ?
		System.out.println("개수 : " + list.size());

		// 처음 데이터
		s = list.get(0);
		System.out.println("처음 : " + s);

		// 두번째
		s = list.get(1);
		System.out.println("두번째 : " + s);

		// 마지막
		s = list.get(list.size() - 1);
		System.out.println("마지막 : " + s);

		// 처음에 한국 추가
		list.add(0, "한국");
		System.out.println(list);

		// 처음의 데이터를 대한민국으로 수정
		list.set(0, "대한민국");
		System.out.println(list);

		int idx;
		// 인천은 몇 번째 인덱스에 ?
		idx = list.indexOf("인천");
		System.out.println("인천 인덱스 : " + idx);

		idx = list.indexOf("세종"); // 없으면 -1
		System.out.println("세종 인덱스 : " + idx);

		idx = list.indexOf("서울");
		System.out.println("서울(처음부터 검색) : " + idx);

		idx = list.lastIndexOf("서울");
		System.out.println("서울(뒤부터 검색) : " + idx);

		// 부산 존재 여부
		System.out.println("부산이 존재합니까 ? " + list.contains("부산"));

		// 대한민국 삭제
		// list.remove("대한민국");
		list.remove(0);
		System.out.println(list);

		System.out.println("전체 출력 - 1");
		for (int i = 0; i < list.size(); i++) {
			System.out.print(list.get(i) + "  ");
		}
		System.out.println();

		System.out.println("전체 출력 - 2");
		for (String str : list) {
			System.out.print(str + "  ");
		}
		System.out.println();

		System.out.println("전체 출력 - 3");
		// 반복자. 순방향만 가능
		Iterator<String> it = list.iterator(); // 하나씩 데이터를 꺼낸다.
		while (it.hasNext()) { // 데이터가 존재하면 true, 없으면 false
			String str = it.next(); // 있는 곳의 데이터를 돌려주고 다음으로 간다.
			System.out.print(str + "  ");
		}
		System.out.println();

		System.out.println("역순 - 1");
		for (int i = list.size() - 1; i >= 0; i--) {
			System.out.print(list.get(i) + "  ");
		}
		System.out.println();

		System.out.println("역순 - 2");
		// ListIterator : 순방향과 역방향 모두 이동 가능
		// 반복자의 위치를 가장 마지막으로 이동
		ListIterator<String> it2 = list.listIterator(list.size());
		while (it2.hasPrevious()) {
			String str = it2.previous();
			System.out.print(str + "  ");
		}
		System.out.println();

		// 모두 지우기
		list.clear();
		System.out.println("모두 삭제 후 개수 : " + list.size());

	}
}

List 인터페이스

  • 순서가 있는 컬렉션
  • 목록에서 각 요소가 삽입되는 위치를 제어 할 수 있다.
  • 요소를 인덱스로 관리하며, 인덱스로 요소를 검색하거나 삭제 할 수 있다.
  • 동일한 요소(객체)를 중복해서 저장할 수 있다.
  • List 컬렉션은 객체 자체가 저장되는 것이 아니라 객체의 번지를 참조한다.
  • null도 저장이 가능하며, null을 저장한 경우에는 해당 인덱스는 객체를 참조하지 않는다.
  • 배열과 유사한 구조
  • 가변 길이로 저장 공간이 부족하면 자동으로 공간이 늘어난다.

 

List를 하기 위해서 제네릭을 배운 것!

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

String인 자료형을 저장할 리스트를 생성

add 메소드로 요소를 추가 할 수 있다.

size 메소드로 리스트의 크기를 알 수 있다.

set 메소드로 원하는 위치에 리스트를 변경 할 수 있다.

contains 메소드로 리스트에서 검색 후 boolean으로 반환해준다.

package ex0729;

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

public class Ex002_List {

	public static void main(String[] args) {
		List<String> list1 = new ArrayList<String>();
		list1.add("서울");
		list1.add("부산");
		list1.add("대구");

		List<String> list2 = new ArrayList<String>();
		list2.add("강원");
		list2.add("경기");
		list2.add("경상");

		// list2에 list1의 모든 데이터를 추가
		list2.addAll(list1);
		System.out.println(list2);

		// List<String> => String[]
		String[] ss = list2.toArray(new String[list2.size()]);
		System.out.println("리스트를 배열로 복사...");
		for (String s : ss) {
			System.out.print(s + "  ");
		}
		System.out.println();

		// String[] => List<String>
		List<String> list3 = Arrays.asList(ss);
		System.out.println("배열을 리스트로 복사 후 : " + list3);

		// subList(a, b) : a인덱스에서 b-1인덱스까지의 부분 List
		List<String> list4 = list3.subList(1, 4);
		System.out.println(list4); // [경기, 경상, 서울]

		// 전체 삭제
		list1.clear();
		System.out.println("전체 삭제 후 : " + list1.size());

		// list2의 데이터중 [경상, 서울, 부산] 삭제
		System.out.println("삭제 전 : " + list2);
		list2.subList(2, 5).clear();
		
		System.out.println("삭제 후 : " + list2);
		
		
	}

}

list의 메소드를 익히고 적절하게 사용해보도록 하자!

 

배열과 ArrayList

  • 배열은 한 번 크기가 결정되면 배열의 크기를 변경할 수 없다.
  • 배열의 처음이나 중간에 데이터를 삽입하는 경우, 기존 데이터가 존재하면 데이터를 덮어쓰기 때문에 기존 데이터는 사라진다.
  • ArrayList는 가변 길이의 자료구조로 데이터의 검색에 유리하며, 추가 또는 삭제에는 성능을 고려해야 한다.
  • 리스트의 처음, 끝, 중간에 자료를 추가 또는 삭제하는 기능을 제공한다.

근데 왜 

List<String> list = new Arraylist<>(); 이렇게 업 캐스팅 하는 건쥐..?

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0730_Ex01~Ex02_List  (0) 2021.07.30
0729_Ex06~Ex09_system : Java API  (0) 2021.07.29
0729_ConsoleEx_콘솔 입력  (0) 2021.07.29
0729_Ex01~Ex05_Generic  (0) 2021.07.29
0728_Ex11~Ex17_generic : 제네릭  (0) 2021.07.29

+ Recent posts