[Collection] List_ArrayList/LinkedList

LDH·2021년 3월 16일
0

🛒Collection

목록 보기
2/3
post-thumbnail

🛒 List 컬렉션

  1. 요소의 저장 순서가 유지된다.
  2. 같은 요소의 중복 저장을 허용한다.
  3. 대표적인 List컬렉션 클래스에 속하는 클래스로는 ArrayList, LinkedList, Vector, Stack 가 있다.

🛒 ArrayList

  1. 크기가 가변적으로 변하는 선형리스트이다.
  2. 배열을 이용하기 때문에 인덱스를 이용해 배열 요소에 빠르게 접근할 수 있다.
  3. 요소의 추가 및 삭제 작업에 걸리는 시간이 매우 길어지는 단점이 있다.

🛒 ArrayList 선언

ArrayList list = new ArrayList();//타입 미설정 Object로 선언
ArrayList<Member> members = new ArrayList<Member>();//타입설정 Member객체만 사용가능
ArrayList<Integer> num = new ArrayList<Integer>();//타입설정 int타입만 사용가능
ArrayList<Integer> num2 = new ArrayList<>();//new에서 타입 파라미터 생략가능
ArrayList<Integer> num3 = new ArrayList<Integer>(10);//초기 용량(capacity)지정
ArrayList<Integer> list2 = new ArrayList<Integer>(Arrays.asList(1,2,3));//생성시 값추가

🛒 ArrayList 값 추가/삭제

ArrayList<Integer> list = new ArrayList<Integer>();//ArrayList생성

list.add(3); //값 추가
list.add(null); //null값도 add가능
list.add(0,10); //인덱스0에 10 삽입
System.out.println(list.size()); //list 크기 : 3

ArrayList<Member> members = new ArrayList<Member>();//ArrayList생성
Member member = new Member(name,age);
member.add(student);
member.add(new Member("홍길동",15));

list.remove(1); //인덱스 1 제거
list.clear();  //모든 값 제거

🔎 add(idx,val) 메소드에서 인덱스를 생략하면 리스트 맨 뒤에 데이터가 추가가 되며, 중간에 값을 추가하면 해당 인덱스 부터 마지막 인덱스까지 모두 하나씩 밀려난다.
🔎 데이터가 늘어날 수록 성능에 악영향을 주기 때문에 이러한 경우엔 LinkedList를 활용하도록 하자!

🛒 ArrayList 값 출력

ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));//ArrayList 생성

System.out.println(list.get(0)); //인덱스0 값 출력
System.out.println(list); //전체출력 [1,2,3]
		
for(Integer i : list) { //for문을 통한 전체출력
    System.out.println(i);
}

Iterator iter = list.iterator(); //Iterator 선언 
while(iter.hasNext()){//다음값이 있는지 체크
    System.out.println(iter.next()); //값 출력
}

🛒 ArrayList 값 검색

ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));//ArrayList 생성
System.out.println(list.contains(2)); //list에 2이 있는지 검색 : true
System.out.println(list.indexOf(2)); //2가 있는 index반환 없으면 -1

🛒 LinkedList

  1. ArrayList클래스가 배열을 이용하여 요소를 저장함으로써 발생하는 단점을 극복하기 위함이다.
  2. 연결 리스트는 저장된 요소가 비순차적으로 분포한다.
  3. 이러한 요소들 사이를 링크(link)로 연결한다.
    -> 객체를 추가/삭제 하면 앞뒤 링크만 변경해주면 된다.
  4. 단일 연결 리스트: 다음 요소를 가리키는 참조만을 가진다. 저장과 삭제 작업이 아주 빠르지만 현재 요소에서 이전 요소로 접근하기가 매우 어렵다.
    이중 연결 리스트 : 이전 요소를 가리키는 참조도 가진다.
    ->이 둘의 차이는 내부적으로 요소를 저장하는 방법에 있다.
  5. 인덱스가 없기에 특정 요소에 순차탐색으로 접근 가능하다.

🛒 LinkedList 선언

LinkedList list = new LinkedList();//타입 미설정 Object로 선언
LinkedList<Member> members = new LinkedList<Member>();//타입설정 Member객체만 사용가능
LinkedList<Integer> list = new LinkedList<Integer>();//타입설정 int타입만 사용가능
LinkedList<Integer> list1 = new LinkedList<>();//new에서 타입 파라미터 생략가능
LinkedList<Integer> list2 = new LinkedList<Integer>(Arrays.asList(1,2,3));//생성시 값추가
  • ArrayList와는 다르게 초기 크기를 미리 생성할 수는 없다.

🛒 LinkedList 값 추가/삭제

LinkedList<Integer> list = new LinkedList<Integer>();//LinkedList 생성

list.addFirst(1);//가장 앞에 데이터 추가
list.addLast(2);//가장 뒤에 데이터 추가
list.add(3);//데이터 추가
list.add(1, 10);//index 1에 데이터 10 추가

System.out.println(list.size()); //list 크기 : 4

LinkedList<Member> memebers = new LinkedList<Member>();
Member student = new Member(name,age);
members.add(student);
members.add(new Member("홍길동",77));

list.removeFirst(); //가장 앞의 데이터 제거
list.removeLast(); //가장 뒤의 데이터 제거
list.remove(); //생략시 indext 0 제거
list.remove(1); //index 1 제거
list.clear(); //모든 값 제거

🛒 LinkedList 값 출력

LinkedList<Integer> list = new LinkedList<Integer>(Arrays.asList(1,2,3));//LinkedList 생성

System.out.println(list.get(2));//2번째 index 출력
				
for(Integer i : list) { //for문을 통한 전체출력
    System.out.println(i);
}

Iterator<Integer> iter = list.iterator(); //Iterator 선언 
while(iter.hasNext()){//다음값이 있는지 체크
    System.out.println(iter.next()); //값 출력
}

🛒 LinkedList 값 검색

LinkedList<Integer> list = new LinkedList<Integer>(Arrays.asList(1,2,3));//LinkedList 생성
System.out.println(list.contains(1)); //list에 1이 있는지 검색 : true
System.out.println(list.indexOf(1)); //1이 있는 index반환 없으면 -1

🛒List 인터페이스 메소드

List 인터페이스는 Collection 인터페이스를 상속받으므로, Collection 인터페이스에서 정의한 메소드 모두 사용 가능

메서드설명
boolean add(E e)해당 리스트(list)에 전달된 요소를 추가
void clear()모든 요소를 제거
boolean contains(Object o)전달된 객체를 포함하고 있는지를 확인함
boolean equals(Object o)전달된 객체가 같은지를 확인
boolean isEmpty()해당 리스트가 비어있는지를 확인
Iterator iterator()반복자(iterator)를 반환
boolean remove(Object o)전달된 객체를 제거
int size()요소의 총 개수를 반환
Object[] toArray()모든 요소를 Object 타입의 배열로 반환
profile
💻💻💻

0개의 댓글