본문 바로가기
JAVA

[컬렉션프레임워크] 링크리스트 & 그 외 컬렉션

by amoomar 2022. 1. 12.
반응형

이번 포스팅에서는 컬렉션 중 배열리스트를 제외한 연결리스트(링크리스트), Set, 스텍, 큐, 맵, 이터레이터에 대한 간략한 내용을정리해보았다.

 

 

 

 

 


 

 

 

 

 

1. 링크리스트 : 연결리스트

Link는 class이며, 그 중에서도 interface class임을 알 것 -> 메서드를 강제한다

 

 

 

1) 링크리스트 선언과 메서드

package class01;

import java.util.LinkedList; // 임폴트 생성 필요

public class Test01 {

	public static void main(String[] args) {

		LinkedList <Integer> ll = new LinkedList<Integer>();
		ll.add(10);
		ll.add(20);
		ll.add(30);
       	 //첫인덱스에 보내는 값
		ll.push(100);
		System.out.println(ll);
		
	}
}

배열 리스트에서 사용하던 메서드들이 동일하게 사용되고 있음을 확인할 수 있다. 그 중에서도 다른 점을 꼽자면, 인덱스의 값을 세세하게 컨트롤 할 수 있는 메서드가 많다는 것이다. 그러나 보통의 경우에는 활용도가 높지는 않다. 바로 아래에 콘솔의 출력과 메서드의 예시를 첨부하였다.

ex. getFirst();첫번째인덱스의 값을 조회 / getLast(); 마지막인덱스의 값을 조회

 

 

 

 

 

 


 

 

 

 

 

2. Set

순서와 중복이 없는것이 특징이다

 

1) 선언 및 사용방법

package class01;

import java.util.HashSet; //임폴트 생성 필요

public class Test02 {

	public static void main(String[] args) {
		HashSet hs = new HashSet();
		
		// Set(집합)은 순서와 중복이 없는 것이 특징이다.
		// 규칙은 있으나 그것을 알아낼 필요성은 없다.
		hs.add(10);
		hs.add(20);
		hs.add(30);
		hs.add(1);
		hs.add(2);
		hs.add(3);
		hs.add(3);
		hs.add(10);
		hs.add(20);
		hs.add(30);
		hs.add(1);
		hs.add(2);
		hs.add(3);
		hs.add(3);
		System.out.println(hs);
		System.out.println(hs.size()); //Set의 길이
		
	}
}

출력 결과

 

 

 

 

 

 

 


 

 

 

 

 

 

 

3. 스텍 & 큐

1) 스텍과 큐의 정의와 구분

  • 스텍
    • 입구가 1개인 선형구조(ex. 프루팁스 혹은 총)
    • 입구 맨 앞에 있는 값이 먼저 출력된다
    • 즉, FILO(선입후출) 형식을 띈다.
    • EX) ctrl+Z(실행취소) = 뒤로가기, 최근 방문한 페이지 등의 뉘앙스
    • 입구와 출구가 정해진 선형구조(ex. 터널)
    • 먼저 넣은값이 출구랑 가까워 먼저 출력된다.
    • 즉, FIFO(선입선출) 형식을 띈다.
    • EX) 수강신청, 티켓팅, 게임 등등 일반적으로 많은 경우에 활용됨

 

 

 

 

 

 


 

 

 

 

 

 

2) 선언 예시

package class01;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

public class Test03 {

	public static void main(String[] args) {
		Stack s = new Stack(); //import생성
		s.push(10);
		s.push(20);
		s.push(30);
		System.out.println(s); // [10, 20, 30]
		s.pop();//데이터 꺼내는 메서드 / 삭제를 동반한 출력
		System.out.println(s); // [10, 20]
		s.pop();
		//보기만 하는 메서드
		//삭제를 동반하지 않는 출력
		System.out.println(s.peek()); // 10
		System.out.println(s.peek()); // 10
		System.out.println(s.peek()); // 10
		
		System.out.println("==================");
		
		Queue q = new LinkedList(); //import 두개가 생성됨
		q.offer(1);
		q.offer(2);
		q.offer(3);
		System.out.println(q); //[1, 2, 3]
		q.poll(); //삭제를 동반한 출력 : 1이 삭제됨
		System.out.println(q.poll()); // 값 2가 삭제와 동시에 출력됨
		System.out.println(q.peek()); //삭제를 동반하지 않는 출력
		
		
	}
}

출력결과

 

 

 

 

 

 

 


 

 

 

 

 

 

 

4. 맵

: key와 value의 데이터가 Map에서 하나의 데이터로 취급된다. 즉, 한 쌍의 데이터가 1개의 데이터가 된다

 

1) 사용예시

package class01;

import java.util.HashMap; //임폴트 생성

public class Test04 {

	public static void main(String[] args) {
		//          <키, 벨류>
		HashMap <Integer,String> hm = new HashMap <Integer,String> ();
		
		hm.put(1, "홍길동");
		hm.put(2, "임꺽정");
		hm.put(3, "김첨지");
		System.out.println(hm);
		
		System.out.println(hm.get(2)); // 임꺽정 출력
		hm.remove(2); //Index[2] 데이터 삭제
		
		System.out.println(hm);
		
		//4개의 값이지만 2개가 한쌍이므로 길이는 2
		System.out.println(hm.size()); 
		
		//키값 출력
		System.out.println(hm.keySet());
		
	}

}

출력결과

 

 

 

 

 


 

 

 

 

 

 

 

5. 이터레이터

: 모든 컬렉션에 존재하며, 배열에서의 for each문과 같은 역할을 한다. 본체(선언된 리스트)를 복사하여 사용되며 주로 데이터를 화면에 출력하고자 할때 많이 사용된다

 

1) 선언예시

package class01;

import java.util.ArrayList;
import java.util.Iterator;

public class Test05 {

	public static void main(String[] args) {
		
		ArrayList al = new ArrayList();
		al.add(1);
		al.add(2);
		al.add(3);
		Iterator itr=al.iterator(); //이 메서드를 사용하면 본체(al)를 복사하게 된다
					//데이터를 화면에 출력하고자 할때 많이 사용한다.
		
		
		while(itr.hasNext()) { //조건식에 많이 활용됨 : itr이 다음 데이터를 가지는 동안 계속수행
			System.out.print(itr.next() + " "); //그 다음데이터 화면에 출력해라!
		}
	
		
	}
}

출력결과

 

 

 

 

 

 


 

 

 

 

 

 

 

2) 예제 

: 클래스A를 생성, 배열리스트에 클래스A 객체를 선언하고 그 인자를 통해 값을 3개 저장! 저장된값을 Interator메서드를 활용하여 출력하기!

package class01;

import java.util.ArrayList;
import java.util.Iterator;

class A{
	int a;
	
	A(int a){
		this.a = a;
	}

	@Override
	public String toString() {
		return a+"";
	}
	
}

public class Test06 {

	public static void main(String[] args) {
		ArrayList <A> al = new ArrayList <A> ();
		al.add(new A(10));
		al.add(new A(20));
		al.add(new A(30));
		System.out.println(al);
		
		Iterator itr = al.iterator();
		
		while(itr.hasNext()) {
			System.out.print(itr.next() + " ");
		}

	}
}

출력결과

반응형

'JAVA' 카테고리의 다른 글

[Thread] 블록 & 동기화  (0) 2022.01.13
[예외처리] 예외화 & 예외미루기  (0) 2022.01.13
[컬렉션프레임워크] 배열리스트  (0) 2022.01.11
자판기 만들기_재고와 PK  (0) 2022.01.10
[최상위클래스] Object클래스  (0) 2022.01.03