[JAVA] [ *Collections* ] / List / Vector / Iterator / arraylist / toString / String.format

sΒ·2023λ…„ 12μ›” 1일
0

πŸ—‚οΈ 였λ₯˜ / 정리

λͺ©λ‘ 보기
3/19
post-thumbnail

Javaμ—μ„œλŠ” 일반적으둜 ν΄λž˜μŠ€μ— μΊ‘μŠν™”λœ κΈ°λŠ₯(μ•ˆμ „/은닉)κ³Ό 데이터λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ ν΄λž˜μŠ€μ—μ„œ 객체λ₯Ό 생성
: μΊ‘μŠν™”?? - private : 으둜 μ„ μ–Έλ˜μ–΄ μ™ΈλΆ€μ—μ„œ 직접적인 접근이 λΆˆκ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€. λŒ€μ‹ μ—, ν΄λž˜μŠ€λŠ” μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 μžˆλŠ” public λ©”μ„œλ“œ(λ˜λŠ” getter와 setter)λ₯Ό μ œκ³΅ν•˜μ—¬ 데이터에 μ ‘κ·Όν•˜κ±°λ‚˜ μ‘°μž‘ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

μ»¬λ ‰μ…˜(Collection) :

  • Java ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ‹€μ–‘ν•œ ν˜•νƒœλ‘œ 데이터λ₯Ό μ €μž₯ν•˜κ³ ,κ·Έλ£Ήν™”ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” ꡬ쑰 (Javaμ—μ„œ 맀우 μ€‘μš”)

    List (λͺ©λ‘):

    μˆœμ„œκ°€ μžˆλŠ” λ°μ΄ν„°μ˜ 집합
    데이터λ₯Ό μΆ”κ°€ν•œ μˆœμ„œλŒ€λ‘œ μ €μž₯ν•˜λ©°, μ€‘λ³΅λœ κ°’ ν—ˆμš©
    μ˜ˆμ‹œ: ArrayList( 데이터λ₯Ό μΆ”κ°€ν•˜κ³  μ‚­μ œν•˜λŠ” 데 효율적), LinkedList

    Set (집합):

    Set은 μ€‘λ³΅λœ 값을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” λ°μ΄ν„°μ˜ 집합을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μˆœμ„œκ°€ μ •ν•΄μ Έ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    μ˜ˆμ‹œ: HashSet, TreeSet

    Map (맡):

    ν‚€-κ°’ 쌍의 데이터λ₯Ό μ €μž₯ν•˜λ©°, 각 ν‚€λŠ” κ³ μ •
    (검색과 μˆ˜μ •μ— νŠΉν™”)
    μ˜ˆμ‹œ: HashMap, TreeMap

    Queue (큐):

    QueueλŠ” μ„ μž…μ„ μΆœ(FIFO, First-In-First-Out) ꡬ쑰의 데이터λ₯Ό μ €μž₯
    주둜 μž‘μ—… λŒ€κΈ°μ—΄ 등에 μ‚¬μš©

Stack (μŠ€νƒ):

Stack은 ν›„μž…μ„ μΆœ(LIFO, Last-In-First-Out) ꡬ쑰의 데이터λ₯Ό μ €μž₯ 주둜 역좔적(backtracking)μ΄λ‚˜ μž¬κ·€ μ•Œκ³ λ¦¬μ¦˜ 등에 μ‚¬μš©λ©λ‹ˆλ‹€.

μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬(Collection Framework)λž€?
데이터λ₯Ό 효율적으둜 μ‘°μž‘ν•˜κ³  ꡬ쑰화할 수 μžˆλ„λ‘ μ‚¬μš©ν•˜λŠ”

μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ˜ 초기 μš©λŸ‰(capacity) :
ex) ArrayList(클래슀) : λ‚΄λΆ€ 배열을 μ‚¬μš©ν•΄μ„œ μš”μ†Œ μ €μž₯
-> λ°°μ—΄μ˜ 초기 μš©λŸ‰ : 10 (λ³€κ²½ κ°€λŠ₯)

λ‚΄λΆ€μ μœΌλ‘œ 크기 μ‘°μ • λ©”μ»€λ‹ˆμ¦˜μ΄ μžˆμ–΄μ„œ λ°μ΄ν„°μ˜ 상황에 따라 μΆ”κ°€, 제거 λ“± ν•„μš”μ— 따라 크기 μ‘°μ ˆν•¨
ex) ArrayList(클래슀) : λ°°μ—΄ 크기가 λΆ€μ‘±ν•˜λ©΄ μžλ„μ‘λ‘œ 더 큰 λ°°μ—΄λ‘œ 볡사 / μš”μ†Œ μ œκ±°ν•˜κ³ μ‹ΆμœΌλ©΄ μžλ™μœΌλ‘œ 크기 μ€„μž„

μΈν„°νŽ˜μ΄μŠ€ (Interfaces):

Collection: λͺ¨λ“  μ»¬λ ‰μ…˜ μΈν„°νŽ˜μ΄μŠ€μ˜ μ΅œμƒμœ„ μΈν„°νŽ˜μ΄μŠ€λ‘œ, 기본적인 μ»¬λ ‰μ…˜ λ™μž‘μ„ μ •μ˜ν•©λ‹ˆλ‹€.
Set: 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” μš”μ†Œλ“€μ˜ 집합을 ν‘œν˜„ν•©λ‹ˆλ‹€.
List: μˆœμ„œκ°€ μžˆλŠ” μš”μ†Œλ“€μ˜ λͺ©λ‘μ„ ν‘œν˜„ν•©λ‹ˆλ‹€.
Queue: μ„ μž…μ„ μΆœ(FIFO) ꡬ쑰의 μš”μ†Œλ₯Ό μ²˜λ¦¬ν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€.
Map: ν‚€-κ°’ 쌍으둜 데이터λ₯Ό μ €μž₯ν•˜λ©°, 각 ν‚€λŠ” κ³ μœ ν•΄μ•Ό ν•©λ‹ˆλ‹€.
클래슀 (Classes):

μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ ꡬ체적인 ν΄λž˜μŠ€λ“€μ΄ μ œκ³΅λ©λ‹ˆλ‹€.
μ˜ˆμ‹œ: ArrayList, LinkedList, HashSet, HashMap λ“±.
μ•Œκ³ λ¦¬μ¦˜ (Algorithms):

검색, μ •λ ¬, 볡사 λ“± λ‹€μ–‘ν•œ μ•Œκ³ λ¦¬μ¦˜μ΄ μ œκ³΅λ˜μ–΄ 효율적인 데이터 처리λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.
μ˜ˆμ‹œ: Collections.sort(), Collections.binarySearch() λ“±.
동기화 (Synchronization):

λ©€ν‹°μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œ μ•ˆμ „ν•˜κ²Œ μ»¬λ ‰μ…˜μ„ μ‚¬μš©ν•  수 μžˆλ„λ‘ λ™κΈ°ν™”λœ μ»¬λ ‰μ…˜λ„ μ œκ³΅λ©λ‹ˆλ‹€.
μ˜ˆμ‹œ: Collections.synchronizedList(), Collections.synchronizedMap() λ“±.
Utility λ©”μ„œλ“œ (Utility Methods):

Collections 클래슀λ₯Ό 톡해 μœ μš©ν•œ λ©”μ„œλ“œλ“€μ΄ μ œκ³΅λ˜μ–΄ 데이터 μ‘°μž‘μ„ κ°„νŽΈν•˜κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ˜ˆμ‹œ: Collections.addAll(), Collections.max(), Collections.shuffle() λ“±.

μΈν„°νŽ˜μ΄μŠ€ (μ €μž₯κ³΅κ°„μœΌλ‘œλ„ μ‚¬μš©)

  • Collection :

    β‘  데이터 μˆ˜μ§‘ν•΄μ„œ λͺ¨μ•„λ†“λŠ” 것
    β‘‘ λ°°μ—΄μ΄λž‘ λ˜‘κ°™μ§€λ§Œ, μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ˜ 초기 μš©λŸ‰(capacity) : κΈ°λ³Έ default μš©λŸ‰ = 10개 / 데이터가 μ•Œμ•„μ„œ λŠ˜μ–΄λ‚˜κ³ , μ€„μ΄λŠ”κ±΄ λͺ…λ Ήμ–΄λ₯Ό 톡해 κ°€λŠ₯
    ex) List, Vector, Set, Map, LinkedList, HashSet, TreeSet, Hashtable

    -------------------------------------------------------------------------------

  • list(μΈν„°νŽ˜μ΄μŠ€) - Vector (클래슀) : 동기화 지원 β†’ ArrayLsit보닀 느림

  • list(μΈν„°νŽ˜μ΄μŠ€) - ArrayLsit (클래슀) : 동기화 지원 X β†’ Vector보닀 빠름

    -------------------------------------------------------------------------------

  • Iterator :

    Collection 객체λ₯Ό λŒμ•„λ‹€λ‹ˆλ©΄μ„œ μ ‘κ·Όν•˜κ³ , Collection의 λ‚΄μš©μ„ μˆœμ„œλŒ€λ‘œ 읽을 수 있음
lterator <String> it = lists.iterator( );
while( it.hasNext() ) {
  String s = it.next( );
  System.out.println(s);

β‘  Collection Framework(방법듀)μ—μ„œ 많이 μ‚¬μš©
β‘‘ Iterator λ©”μ„œλ“œ :
- hasNext( ) : λ‹€μŒκ±°λ₯Ό ν™•μΈν•˜λŠ” λ©”μ„œλ“œ
- boolean hasNext( ) : λ‹€μŒ μ‘΄μž¬ν™•μΈ (o - true / x - false)
- void remove( ) : λŒμ•„λ‹€λ‹ˆλŠ” μš”μ†Œλ₯Ό μ‚­μ œ, μΌλΆ€λŠ” 지원 λΆˆκ°€ν•  μˆ˜λ„ 있음


-------------------------------------------------------------------------------

list :

β‘  Collection Frameworkμ—μ„œ μ œκ³΅ν•˜λŠ” Interface
β‘‘ λ°°μ—΄μ˜ 일쒅인데, μˆœμ„œκ°€ μžˆλŠ” λ°μ΄ν„°μ˜ 집합
β‘’ μˆœμ„œ μœ μ§€ (Ordering) : μ‚½μž…λœ μˆœμ„œλŒ€λ‘œ μœ μ§€ν•¨ β†’ indexλ₯Ό 톡해 μ ‘κ·Όν•  수 있음
β‘£ 쀑볡 ν—ˆμš© : λ™μΌν•œ μš”μ†Œλ₯Ό μ€‘λ³΅ν•΄μ„œ μ €μž₯ κ°€λŠ₯
β‘€ list λ©”μ„œλ“œ :
- boolen add(E element) : λ¦¬μŠ€νŠΈμ— μš”μ†Œ μΆ”κ°€
- void add(int index, E element) : index에 μš”μ†Œ μ‚½μž…
- get(int index): indext λ°˜ν™˜
- int size( ) : 리슀트 크기 λ°˜ν™˜
- boolean remove(Object o) : λ¦¬μŠ€νŠΈμ—μ„œ 제거
- E remove (int index) : μ§€μ •λœ index을 λ¦¬μŠ€νŠΈμ—μ„œ μ œκ±°ν•˜κ³ , λ°˜ν™˜ν•¨
- void clear( ) : 리슀트 λͺ¨λ“  μš”μ†Œ 제거
β‘₯ listλ₯Ό 이미 λ§Œλ“  μ£Όμš” 클래슀 : ArrayList / Vector / LinkedList...

toString :

  • μžλ°”μ—μ„œ λͺ¨λ“  ν΄λž˜μŠ€κ°€ μƒμ†λ°›λŠ” λ©”μ„œλ“œ
  • 객체의 클래슀 이름 / ν•΄μ‹œμ½”λ“œμ„ λ¬Έμžμ—΄λ‘œ λ°˜ν™˜
  • λ‚΄κ°€ λ§Œλ“  ν΄λž˜μŠ€μ—μ„œ toString( )을 μ˜€λ²„λΌμ΄λ”©ν•΄μ„œ 객체 λ‚΄λΆ€μƒνƒœλ₯Ό λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•˜λ„λ‘ κ΅¬ν˜„ν•  수 μž‡μŒ

String.format :

  • μ§€μ •λœ ν˜•μ‹μ— λ§žμΆ°μ„œ λ¬Έμžμ—΄ 생성가λŠ₯
  • 'format' = 좜λ ₯ν•  λ¬Έμžμ—΄ ν˜•μ‹ 지정
    : %κΈ°ν˜Έμ™€ λ‹€μ–‘ν•œ ν˜•μ‹μ§€μ •μž(좜λ ₯ν•  κ°’μ˜ νƒ€μž…μ— 따라 지정)둜 ꡬ성
    : 잘 담아놨닀가 예쁘게 κΎΈλ©°μ„œ λ¦¬ν„΄κ°’μœΌλ‘œ λ°˜ν™˜ν•΄λ‹¬λΌλŠ” 뜻

Test1-1.[ μΈν„°νŽ˜μ΄μŠ€ ] - Score

Test1-1

πŸ’» μž…λ ₯

public interface Score {

	public int input();
	public void print();

}

πŸ’‘ **좜λ ₯**
μ •μˆ˜ μž…λ ₯?32
32은 μ§μˆ˜μž…λ‹ˆλ‹€.


πŸ“Œ Note Code



Test1-2. [ μžμ‹ν΄λž˜μŠ€ ] - ScoreImpl

Test1-2

πŸ’» μž…λ ₯


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

public class ScoreImpl implements Score {

	
	private List<ScoreVO> lists = new ArrayList<ScoreVO>();
	//list = λ°°μ—΄λ§Œλ“œλŠ” μΈν„°νŽ˜μ΄μŠ€ - arraylist = 클래슀
	// μ•„λž˜ input()λ©”μ„œλ“œμ— μ•ˆλ„£κ³  private둜 ν•΄μ„œ μ§μ›κ³΅μœ ν•˜λŠ” 이유 : λ©”μ„œλ“œμ•ˆμ— λ„£μœΌλ©΄ new객체가 계속 λ§Œλ“€μ–΄μ Έμ„œ 각자 λ‹€λ₯Έ μ£Όμ†Œκ°€ 됨
    
    
	@Override
	public int input() {
		
		int result = 0; 
		
		Scanner sc = new Scanner(System.in);
		
		ScoreVO vo = new ScoreVO(); //input μ‹€ν–‰ ν• λ•Œλ§ˆλ‹€ ν•œλ²ˆ μ«™ 신상 λ‹€ λ°›μ•„λ‚΄λ‹ˆκΉŒ forν•„μš”μ—†μŒ
	
		System.out.print("ν•™λ²ˆ?");
		vo.setHak(sc.next()); // set에 μ˜ν•΄ 값이 듀어감
		
		System.out.print("이름?");
		vo.setName(sc.next());
		
		System.out.print("κ΅­μ–΄?");
		vo.setKor(sc.nextInt());
		
		System.out.print("μ˜μ–΄?");
		vo.setEng(sc.nextInt());
		
		System.out.print("μˆ˜ν•™?");
		vo.setMat(sc.nextInt());
		
		lists.add(vo);
		
		
		return result;
	}


	@Override
	public void print() {
		
		Iterator<ScoreVO> it = lists.iterator(); //vo의 데이터 νƒ€μž… = scorevo
		
		//vo = 5개 λ³€μˆ˜,getter,setter,print 
		
		while(it.hasNext()) {
			
			ScoreVO vo = it.next();
			
			System.out.println(vo); //toStringμ•ˆμ¨λ„ 좜λ ₯κ°€λŠ₯
			//System.out.println(vo.toString()); 
			
		}
		
	}

}

Test1-3. [ Score 데이터 μ €μž₯곡간 ] - ScoreVO

Test1-3

πŸ’» μž…λ ₯


public class ScoreVO {// Value Object : 여기에 데이터λ₯Ό μ €μž₯ν• κΊΌμ•Ό
//VOλ₯Ό μ“°λ©΄ 데이터저μž₯μ†Œ 
//VOμ•ˆμ“°κ³  DB와 μ—°λ™ν•˜λ©΄ -?DTO 

	private String hak, name;
	private int kor;
	private int eng;
	private int mat;
	
	
	public String getHak() {
		return hak;
	}
	public void setHak(String hak) {
		this.hak = hak;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getKor() {
		return kor;
	}
	public void setKor(int kor) {
		this.kor = kor;
	}
	public int getEng() {
		return eng;
	}
	public void setEng(int eng) {
		this.eng = eng;
	}
	public int getMat() {
		return mat;
	}
	public void setMat(int mat) {
		this.mat = mat;
	}

	@Override //ScoreVO의 λΆ€λͺ¨ - object  
	public String toString() { //λͺ¨λ“ νƒ€μž…을 λ‹€ 문자둜 λ³΄μ—¬μ€˜
		
		String str;
		
		//슀트링포맷 ?  잘 담아놨닀가 예쁘게 κΎΈλ©°μ„œ λ¦¬ν„΄κ°’μœΌλ‘œ 쀘 
		str = String.format("%5s %6s %4d %4d %4d %4d %4d",hak,name,
				kor,eng,mat,(kor+eng+mat),(kor+eng+mat)/3);
		
		return str;
	}

	// get/set

}

Test1-5. ScoreMain

Test1-5

πŸ’» μž…λ ₯


import java.util.Scanner;

public class ScoreMain {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		
		//input,printκ°€ ν΄λž˜μŠ€λΌμ„œ 객체 생성
		
		//μΈν„°νŽ˜μ΄μŠ€ - 클래슀
		Score ob = new ScoreImpl();
	//	Score ob = new ScoreImpl();
		
	int ch;
	while (true) {

		do {
			System.out.print("1.μž…λ ₯? 2.좜λ ₯ 3.μ’…λ£Œ?");
			ch = sc.nextInt(); // μ‚¬μš©ν•œν…Œ 받은 값을 ch에 받을거야

		} while (ch < 1); //ch>3을 μ•ˆμ“΄ μ΄μœ λŠ” μ•„λž˜ switchλ¬Έμ—μ„œ default값을 3번 μ΄ν›„μ—λŠ” λ‹€ μ’…λ£Œν• κ±°κΈ°λ•Œλ¬Έμ—

		switch (ch) {

		case 1:
			ob.input();
			break;
		case 2:
			ob.print();
			break;
		default:
			System.exit(0);//μ›λž˜λŠ” return인데, μ’…λ£Œμ‹œν‚€κ³ μ‹ΆμœΌλ‹ˆκΉŒ - μžλ°”ν”„λ‘œκ·Έλž¨ κ°•μ œ μ’…λ£Œ λͺ…λ Ήμ–΄
			}

		}
	
	}

}

πŸ’‘ **좜λ ₯**
1.μž…λ ₯? 2.좜λ ₯ 3.μ’…λ£Œ?1
ν•™λ²ˆ?2015
이름?μˆ˜μ§€
κ΅­μ–΄?10
μ˜μ–΄?20
μˆ˜ν•™?30
1.μž…λ ₯? 2.좜λ ₯ 3.μ’…λ£Œ?2
 2015     μˆ˜μ§€   10   20   30   60   20
1.μž…λ ₯? 2.좜λ ₯ 3.μ’…λ£Œ?1
ν•™λ²ˆ?2015
이름?수인
κ΅­μ–΄?50
μ˜μ–΄?60
μˆ˜ν•™?70
1.μž…λ ₯? 2.좜λ ₯ 3.μ’…λ£Œ?2
 2015     μˆ˜μ§€   10   20   30   60   20
 2015     수인   50   60   70  180   60
1.μž…λ ₯? 2.좜λ ₯ 3.μ’…λ£Œ?

profile
μ–΄μ œλ³΄λ‹€ 쑰금 더 μ„±μž₯ν•˜κΈ°!

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보