- 1006(16일차)2023년 10월 06일 15시 15분 27초에 업로드 된 글입니다.작성자: 삶은고구마
복습
Data Structure
-data in memory 대용량 데이터를 메모리에서 처리하는 방법
List:순서가 중요할때, 정렬 필요할 때.
set:중복을 허용하지 않을 때
map:key와 value를 묶어서 분류할 때(key로 value를 찾음,key는 중복x)
List
ArrayList
LinkedList
:위의 두 리스트는 사용할 수 있는 메소드는 같지만 구조가 다름
Queue
Stack
ArrayList LinkedList 내부 배열을 관리하지 않는다. 요소와 요소를 연결해서 관리한다.(주소값) 중간에 요소 추가 및 삭제가 빈번한 데이터에 사용.
그래서
조회/검색이 빈번하다면 ArrayList가 더 효율적이다.
=>검색은 ArrayList가 빠름.
=>LinkedList는 전부 다 뒤져봐야함.
마지막 요소는 다음번지를 가르키는 값이 nullQueue 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도 다룰 수 있다.
'공부' 카테고리의 다른 글
1011 (18일차) (4) 2023.10.11 1010 (17일차) 예외처리 (2) 2023.10.10 1005(15일차) (0) 2023.10.05 1004 14일차 (2) 2023.10.04 0927 13일차 (0) 2023.09.27 다음글이 없습니다.이전글이 없습니다.댓글