[JAVA]22일차(컬렉션 프레임워크(Collection Framework)/List)

정효진·2021년 8월 13일
0

Developer Study

목록 보기
41/47
post-thumbnail

8월13일(금)

Test160~Test168

◼ List(리스트)

List → Vector, ArrayList, ...

  • 순서 있음
  • 배열과 유사
  • 중복 허용(순서로 식별 가능하기 때문에)

▪ ArrayList 클래스와 Vector 클래스

  • ArrayList 와 Vector 클래스는 List 를 크기 변경이 가능한 배열로 구현한 것으로
    차이점은 Vector 클래스의 객체는 기본적으로 동기화 되지만, ArrayList 는 그렇지 않다는 점이다.

  • 비동기화 컬렉션은 동기화된 컬렉션보다 더 나은 성능을 제공하며 스레드들이 컬렉션을 공유하지 않는 프로그램에서는 일반적으로 ArrayList 를 Vector 보다 더 선호하며, ArrayList 는 동기화를 고려하지 않는 Vector 처럼 동작함으로써 스레드 동기화에 따르는 부담을 가지지 않기 때문에 Vector 보다 더 빠르게 실행된다.

  • null을 포함한 모든 요소를 허용하며 List 인터페이스를 구현하는 것 외에 리스트에 격납하기 위해 내부적으로 사용되는 배열의 사이즈를 조작하는 메소드를 제공한다.

▪ List 코드 1📝

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

public class Test161
{
	public static void main(String[] args)
	{
		// ArrayList 자료구조 인스턴스 생성
		//ArrayList<String> list = new ArrayList<String>();
		//Vector<String> list = new Vector<String>();
		//List<String> list = new Vector<String>();
		List<String> list1 = new ArrayList<String>();

		// list1 에 요소 추가 -> add()
		list1.add("나이브스아웃");
		list1.add("인셉션");
		list1.add("인터스텔라");

		// ArrayList 자료구조 인스턴스 생성
		List<String> list2 = new ArrayList<String>(list1);

		// list2 에 요소 추가
		list2.add("모가디슈");
		

		// ArrayList 자료구조 인스턴스 생성
		List<String> list3 = new ArrayList<String>();

		// list3 에 list2 의 전체 요소 추가  -> addAll();
		list3.addAll(list2);

		// "인셉션 dkvdp "분노의질주" 추가
		// ① "인셉션 찾기 -> indexOf() -> 위치값 인덱스 반환
		int n = list3.indexOf("인셉션");

		//System.out.println("인셉션 위치 : " + n);
		//--==>> 인셉션 위치 : 1

		// ② "인셉션" 찾은 인덱스 위치에 "분노의질주" 투입(삽입)
		list3.add(n,"분노의질주"); //그냥 add하면 뒤에 붙는데 index값 add는 index값에 붙음
		//--==>> [나이브스아웃, 분노의질주, 인셉션, 인터스텔라, 모가디슈]

		// 출력 -> 더미 데이터 확인
		System.out.println("============================================================");
		System.out.println(list1);
		//--==>> [나이브스아웃, 인셉션, 인터스텔라]
		System.out.println(list2);
		//--==>> [나이브스아웃, 인셉션, 인터스텔라, 모가디슈]
		System.out.println(list3);
		//--==>> [나이브스아웃, 인셉션, 인터스텔라, 모가디슈]

		System.out.println();

		// 출력 → listIterator() 메소드를 활용하여 출력
		System.out.println("============================================================");
		list3.listIterator();
		ListIterator<String> li = list3.listIterator();
		while (li.hasNext())
		{
			System.out.print(li.next() + " ");
		}
		System.out.println();
		//--==>> 나이브스아웃 분노의질주 인셉션 인터스텔라 모가디슈  // 얘는 더미를 찍은 것과는 다름!

		System.out.println();
		
		// 출력 -> 역순으로 출력 .hasPrevious()
		System.out.println("============================================================");
		while (li.hasPrevious())
		{
			System.out.print(li.previous() + " ");
		}
		System.out.println();
		//--==>> 모가디슈 인터스텔라 인셉션 분노의질주 나이브스아웃
	
	}
}

▪ List 인터페이스

  • 순서가 있음, 배열과 유사, 중복을 허용(순서로 식별 가능하기 때문에)
  • 주요 구현 클래스
    ㆍVector(동기화 지원)
    ㆍArrayList(동기화 지원하지 않음)
    ㆍLinkedList(체인, 링크, 결합)

▪ List 코드 2📝

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


public class Test162
{
	public static void main(String[] args)
	{
		List<String> list = new ArrayList<String>();

		list.add("서울");
		list.add("부산");
		list.add("인천");
		list.add("대구");
		list.add("광주");
		list.add("대전");
		list.add("울산");
		list.add("세종");

		// 더미 체크
		System.out.println(list);
		//--==>> [서울, 부산, 인천, 대구, 광주, 대전, 울산, 세종]

		System.out.println("전체 갯수 : " + list.size());
		//--==>> 전체 갯수 : 8

		//첫 번째 요소만 출력
		System.out.println("첫 번째 요소 : " + list.get(0));
		//--==>> 첫 번째 요소 : 서울

		// 마지막 요소만 출력
		System.out.println("마지막 요소 : " + list.get(list.size()-1));   //--check~!!
		//--==>> 마지막 요소 : 세종

		// 처음 위치에 "목포" 추가
		list.add(0, "목포");

		//더미 체크
		System.out.println(list);
		//--==>> [목포, 서울, 부산, 인천, 대구, 광주, 대전, 울산, 세종]

		// 처음 위치의 데이터(요소)를 "대한민국"으로 변경    -> 덮어쓰기
		list.set(0,"대한민국");

		//더미 체크
		System.out.println(list);
		//--==>> [대한민국, 서울, 부산, 인천, 대구, 광주, 대전, 울산, 세종]

		// "서울" 존재여부 확인
		if (list.contains("서울"))
			System.out.println("서울이 존재합니다.");
		//--==>> 서울이 존재합니다.

		// "대한민국" 지우기
		//list.remove("대한민국");  //--(O)
		list.remove(0);				//--(O)     //--check~!!

		//더미 체크
		System.out.println(list);
		//--==>> [서울, 부산, 인천, 대구, 광주, 대전, 울산, 세종]

		//ArrayList 자료구조 list 의 전체 요소 출력
		System.out.println("전체 출력...①");
		for (int idx=0; idx<list.size();idx++)
		{
			System.out.print(list.get(idx) + " ");
		}
		System.out.println();
		//--==>> 전체 출력...①
		//		 서울 부산 인천 대구 광주 대전 울산 세종

		System.out.println("역순 출력...②");
		for (int idx=list.size()-1; idx>=0; idx--)         //--check~!!
		{
			System.out.print(list.get(idx) + " ");
		}
		System.out.println();
		//--==>> 역순 출력...②
		//		 세종 울산 대전 광주 대구 인천 부산 서울

		System.out.println("전체 출력...③");      //for-each 구문사용
		for (String s : list )
		{
			System.out.print(s + " ");
		}
		System.out.println();
		//--==>> 전체 출력...③
		//		 서울 부산 인천 대구 광주 대전 울산 세종

		System.out.println("전체 출력...④");
		Iterator<String> it = list.iterator();
		while (it.hasNext())
		{
			String s = it.next();
			System.out.print(s + " ");
		}
		System.out.println();
		//--==>> 전체 출력...④
		//		 서울 부산 인천 대구 광주 대전 울산 세종

		
		System.out.println("전체 출력...⑤");
		ListIterator<String> li = list.listIterator();
		while (li.hasNext())
		{
			System.out.print(li.next() +  " ");
		}
		System.out.println();
		//--==>> 전체 출력...⑤
		//		 서울 부산 인천 대구 광주 대전 울산 세종

		System.out.println("역순 출력...⑥");
		while (li.hasPrevious())
		{
			String s = li.previous();
			System.out.print(s+ " ");
		}
		System.out.println();
		//--==>> 역순 출력...⑥
		//		 세종 울산 대전 광주 대구 인천 부산 서울


	}
}

▪ asList()메소드와 toArray()메소드

  • String[] -> List : Arrays.asList()
  • List -> String[] : List.toArray()

▪ asList()메소드와 toArray()메소드 코드📝

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

public class Test163
{
	public static void main(String[] args)
	{
		List<String> mList = new ArrayList<String>();

		mList.add("1");
		mList.add("2");
		mList.add("3");

		// List -> String[]
		String[] sArrays = mList.toArray(new String[mList.size()]);  //스트링배열의 형태로 리스트를 배열로 변경

		for (String s:sArrays)
		{
			System.out.print(s +" ");
		}
		System.out.println();
		//--==>> 1 2 3

		// String[] -> list
		List<String> mNewList = Arrays.asList(sArrays);
		// ※ 『Arrays.asList()』의 반환 자료형 List이기 때문에

		for (String s : mNewList)
		{
			System.out.print(s + " ");
		}
		System.out.println();
		//--==>> 1 2 3

	}
}
profile
개발새발

0개의 댓글