공부

1006(16일차)

삶은고구마 2023. 10. 6. 15:15

복습

Data Structure

-data in memory 대용량 데이터를 메모리에서 처리하는 방법

List:순서가 중요할때, 정렬 필요할 때.

set:중복을 허용하지 않을 때

map:key와 value를 묶어서 분류할 때(key로 value를 찾음,key는 중복x) 


List

ArrayList

LinkedList

:위의 두 리스트는 사용할 수 있는 메소드는 같지만 구조가 다름

Queue

Stack

ArrayList LinkedList
  내부 배열을 관리하지 않는다.
  요소와 요소를 연결해서 관리한다.(주소값)
  중간에 요소 추가 및 삭제가 빈번한 데이터에 사용.
그래서 
조회/검색이 빈번하다면 ArrayList가 더 효율적이다.
=>검색은 ArrayList가 빠름.
=>LinkedList는 전부 다 뒤져봐야함.
마지막 요소는 다음번지를 가르키는 값이 null

 

Queue Stack
선입선출(FIFO):먼저들어오고 먼저 나간다
후입선출(LIFO):나중에 들어온게 먼저 나간다
Queue.offer(T)
:마지막에 요소 추가

Queue.poll():T
:맨 앞에 요소 가져오고 제거

while(!queue.isEmpty())
:일괄출력할 때 비어있는지 물어보고 true면 반복

Stack.push(T)
:마지막에 요소 추가

Stack.pop():T
:마지막 요소 가져오고 제거

Stack.peek():T
:마지막 요소 엿보기(제거하진 않음)
ArrayList와 같은 배열기반 작업 데이터 추가/삭제가 용이한 LinkedList

Set

-집합

-중복을 허용하지 않는 자료 구조.

-저장한 순서를 보장하지 않는다.

-커스텀 클래스인 경우 equals와 hashcode override 필수.

-다형성과 제네릭 적용

 

1)HashSet

HashSet<Integer> set1 = new HashSet<>();
Set<String>set2 = new HashSet<>();
Collection<Double> set3 = new HashSet<>();


요소 추가 set2.add("hi"); 
해당 제네릭에 맞춰서 추가해줘야 한다. set2는 String만 다룬다.
요소 출력 순서를 보장하지 않기 때문에 get(index)같이 인덱스를 사용할 수 없음.
일반for문 사용불가
전체를 순회하면서 꺼내와야 한다.
중복된 요소가 있다면 중복이 제거되어 한 번만 출력된다
add한 순서와 상관없이 출력된다.

출력방법
1)foreach
for(String str:set2)

2)Iterator
Iterator<String> iter = set2.iterrator();
while(iter.hasNext())


요소 삭제 println등으로 확인시 true/false도 반환한다.
equals, hashcode기반으로 요소를 찾아 삭제.
set2.remove("hi");

요소 갯수 set2.size();
요소 포함 여부 set2.contains("bye");
포함되어있다면 true를, 포함되어있지 않다면 false 리턴

List<->Set 으로 사용하는 경우도 있음.

List에서 Set: 중복제거

Set에서 List: 정렬필요

List<Integer> list = new ArrayList<>();
		list.add(3);
		list.add(3);
		list.add(1);
		list.add(3);
		list.add(5);
		
		System.out.println(list);
		
		//Set으로 변환 set생성시 list의 제네릭과 동일한 타입으로,.
		Set<Integer> set = new HashSet<>(list);	
		System.out.println(set); //중복 제거
		
		//
		
		Set<Integer> nums = new HashSet<>();
		nums.add(11);
		nums.add(26);
		nums.add(44);
		nums.add(100);
		
		List<Integer> lists = new ArrayList<>(set);
		System.out.println(lists); //순서

 

 

2)LinkedHashSet

중복제거, 저장한 순서를 유지함

add로 요소 추가 시 , 추가한 순서 유지. but 여전히 index 사용 불가

3)TreeSet

중복제거, 기본정렬을 지원한다.

오름차순으로 정렬


Map

-key와 value가 한 쌍의 요소인 자료 구조.

-key는 중복을 허용하지 않는다.

-key를 통해 value를 조회하는 구조.(속도가 빠르다)

-동일한 key로 새 value를 저장하면 기존 value에 덮어씌워진다.

-컬렉션을 통해 제어 할 수 없다.

 

1) HashMap

HashMap<k,v> 변수명 = new HashMap<>();

Map<k,v> 변수명 = new HashMap<>(); 

 
Map<String, Integer> map = new HashMap<>();
요소 추가하기 map .put(k,v); 
지정한 제네릭에 맞춰서 key value값 대입 
예시에선 key:String / value:Integer 타입이다.
요소 가져오기 map .get(k);
저장된 요소 갯수 map .size();
요소 삭제 map.remove(k);
key값으로 삭제함. 만약 print문으로 감싼다면 삭제된 value를 반환해서 출력해줌.
key 값 포함 여부 true false로 반환
map.containsKey(k);
value 값 포함 여부 true false로 반환
map.conteainsValue(v);
Map 순회하기
맵은 순차적으로 접근이 불가능하다. (인덱스 x 반복문 x)
우회적으로 순회하여 값을 확인해야한다.
keySet() entrySet()
Set<k>
키 값을 Set으로 반환한다.
set과 map 둘다 중복을 허용치 않기 때문에 가능.
Set<Entry<k,v>>
key와 value를 묶어서 entry로 제어한다.

 

2)LinkedHashMap

3)TreeMap

 

3)Properties

-collections Framwork 이 전부터 사용된 legacy 클래스.

-현재에도 사용됨.

-key,value 타입을 String으로 제한한 맵 형식의 자료 구조.

-실제 설정파일 *.properties의 내용을 읽어 프로그램으로 가져오는데 사용한다.

-그 외에 xml도 다룰 수 있다.