본문 바로가기
JAVA SE/이론 및 개념

[20.07.28/Day_14] Java SE / Collection Iterator, Map 컬렉션 이터레이터, 맵

by 파프리카_ 2020. 7. 28.
728x90
반응형

[ Review ] 

~ where am I ~

 

java SE : 기본 문법/용법 → Data Base / JDBC (backend) → html, css , java script(frontend) → servelet / JSP (sever) → model2 / MVC → Ajax(xml, json) → semi project → 형상관리(agile), Git → Spring Framework (IOD-DI, AOD, MUC) → Spring Boot / Security / JQuery / Vuejs→ j unit/mybatis (JPA) → Final project

 

[ java SE ] 

java Basic → oop →  데이터 타입/변수/메서드/생성자 → 제어문 → 배열 → 상속→ 다형성→ static→ abstract→ interface→ collection → Exception → IO,  Thread, Network

 

collection

 - set 

 - list

 - map


[ Collection 컬렉션 | 구현부 ]

 

** interface 란 ? 사용하는 측 <--약속--> 구현한 측

(다중상속의 장점을 지원 → 다양한 계층구조 형성을 통한 다형성 지원)

 

java.util.collection 계열의 interface와 class는 다양한 자료구조의 집합이다.

다양한 데이터를 효과적으로 관리하기 위한 알고리즘을 미리 정의해 재사용하게 한다.

 

Collection interface의 자식 interface는 Set과 List 인터페이스가 있고,

이를 구현한 많은 구현 클래스가 존재한다.

참고링크: https://creamilk88.tistory.com/31

 

[20.07.27/Day_13] Java SE / Collection 컬렉션 (set, list)

[ Scanner ] : 콘솔창에 입력받고 출력해주는 기능 | java.utill.Scanner에 있는 기능 예제 ) import java.util.Scanner; // 실행창에서 Scanner 객체를 이용해 정보를 입력받아 보는 예제 public class TestScann..

creamilk88.tistory.com

 

> Iterator  이터레이터

: Collection 계열의 Interface내의 추상 메서드 interator(.interface())의 return type이 Iterator< >이다.

: Collection 계열 구현체들의 요소(list, set)를 단일한 방식으로 반복, 열거하는 방법을 확인할 수 있는 interface 구현체 

 

장점 : 반복 열거 표준 인테페이스라는 점 ! 

- List 계열 구현체이든, Set 계열 구현체이든 상관없이 둘다 Collection Interface의 하위 구현체이므로,

<<interface>> Iterator 라는 같은 방식으로 반복 열거 가능

 

Iterator interface 예제

1) List 계열

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

public class TestIterator {
	public static void main(String[] args) {
		//Collection<String> : 상위 인터페이스
		//ArrayList<String>() : 하위 구현체
		Collection<String> c1 = new ArrayList<String>(); 
		c1.add("참이슬");
		c1.add("처음처럼");
		
		Iterator<String> it = c1.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
		/* 출력값 : 
		 * 참이슬 
		 * 처음처럼
		 */
	}
}

 

2) Set 계열

import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashSet;

public class TestIterator {
	public static void main(String[] args) {
		//Collection<String> : 상위 인터페이스
		//LinkedHashSet<String>() : 하위 구현체
		Collection<String> c2 = new LinkedHashSet<String>();
		c2.add("참이슬");
		c2.add("처음처럼");
		
		Iterator<String> it2 = c2.iterator();
		while(it2.hasNext()) {
			System.out.println(it2.next());
		}
		/* 출력값 : 
		 * 참이슬 
		 * 처음처럼
		 */
	}
}

 

 

> Map 맵

interface Map <Key, Value>

: key와 value 쌍으로 저장되는 자료구조

* key : 유일해야 함 (primary key) - 만약 같은 key로 추가될 경우 value가 update(재할당)된다. 

 

장점 : 입력 시, key값으로 찾으면 value를 바로 얻을 수 있다.

 

> HashMap  

HashMap 예제 

import java.util.HashMap;

//MAIN CLASS
public class TestMap1 {
	public static void main(String[] args) {
		HashMap<String, Person> map = new HashMap<String, Person>();
		
		// 입력 메서드 : put()
		map.put("a", new Person("브라이언", "하와이"));
		map.put("b", new Person("앨리스", "제주도"));
		
		// 길이 : size()
		System.out.println(map.size()); //2
		System.out.println(map); 
		/*출력:
		 * {a=Person [name=브라이언, address=하와이], b=Person [name=앨리스, address=제주도]}
		 */
		
		// search 메서드 : get(key)
		Person p = map.get("a") ; 
		System.out.println(p);
		/*출력:
		 * Person [name=브라이언, address=하와이]
		 */
		Person p1 = map.get("c"); //map에 없는 key를 넣었을때
		System.out.println(p1);
		/*출력:
		 * null //null이 출력됨
		 */

		// update (key에 새로운 value 재할당)
		map.put("a", new Person("제이슨", "캘리포니아")); //"a" key에 다른 값을 넣어 update 시켜줌
		System.out.println(map.get("a"));
		/*출력:
		 *Person [name=제이슨, address=캘리포니아]
		 */
		
		//key가 존재하는 지 확인하는 메서드 : containsKey(key)
		System.out.println(map.containsKey("a")); //true
		System.out.println(map.containsKey("b")); //true
		System.out.println(map.containsKey("c")); //false
		
		// 특정 key 삭제 메서드 : remove(key)
		System.out.println(map.remove("a"));
		System.out.println(map);
		/*출력:
		 *{b=Person [name=앨리스, address=제주도]}
		 */
		
		// 모든 요소 삭제 메서드 : clear()
		map.clear();
		System.out.println(map);
		/*출력:
		 * {}
		 */
	}
}

// VO CLASS
class Person {
	private String name;
	private String address;

	public Person(String name, String address) {
		super();
		this.name = name;
		this.address = address;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", address=" + address + "]";
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

}

 

 

> LinkedHashMap

: HashMap의 확장 버전으로, 입력 순서를 기억한다.

 

LinkedHashMap 예제 

import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Set;

public class TestMap2 {
	public static void main(String[] args) {
		LinkedHashMap<String, Product> map = new LinkedHashMap<String, Product>();

		Product p = new Product("1", "바나나우유", "빙그레", 1200);
		map.put(p.getId(), p);

		Product p2 = new Product("2", "기네스", "디아자오", 2500);
		map.put(p2.getId(), p2);

		System.out.println(map);
		/* 출력값:
		 * {1=Product [id=1, name=바나나우유, maker=빙그레, price=1200], 
		 * 2=Product [id=2, name=기네스, maker=디아자오, price=2500]}
		 */

		// 상품아이디가 2인 상품의 name을 출력
		System.out.println(map.get("2").getName()); // 기네스
		
		//현재 map의 key들만 반환해주는 method : keySet()
		Set<String> set = map.keySet();
		Iterator<String> it = set.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
			/* 출력값 : 
			 * 1
			 * 2
			 */
		}
		
		//현재 map의 value들만 반환해주는 method : values()
		Collection<Product> list = map.values();
		Iterator<Product> it2 = list.iterator();
		Iterator<Product> it3 = map.values().iterator(); //it2 == it3
		
		while(it2.hasNext()) {
			System.out.println(it2.next());
			/* 출력값 : 
			 * Product [id=1, name=바나나우유, maker=빙그레, price=1200]
			 * Product [id=2, name=기네스,maker=디아자오, price=2500]
			 */
		}
	}
}

 

 

728x90
반응형