2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

20240729_캠프 3주차 1일_컬렉션

2024. 7. 29. 13:56ㆍ내배캠_Java 6기/Java 문법 종합반


컬렉션

✅ 컬렉션 : 자바에서 배열을 더 고도화 시켜서 컬렉션이라는 이름으로 참조형 분류통을 제공

 

✅ 컬렉션 기능 : 크기 자동조정 / 추가 / 수정 / 삭제 / 반복 / 순회 / 필터 / 포함확인 등

 

✅ 컬렉션 종류 :   List, Set, Queue, Map

 

 

ArrayList 리스트 

 

리스트 : 순서가 있는 데이터의 집합. 데이터룰 중복 허용하고 배열과 비슷하다. 

 

배열과 다른 점 : 배열은 최초 길이를 알아야 하지만 리스트는 길이를 몰라도 생성할 수 있다.

그래서 배열은 정적 배열이라고 하고 리스트는 크기가 알아서 늘어나는 동적 배열이라고 한다.

 

✓ 생성 시점에 작은 연속된 공간을 요청해서 참조형 변수를 담아놓는다.

 

✓ 값이 추가될 때 더 큰 공간이 필요하면 더 큰 공간을 받아서 저장

➡️ 마라탕. 일단 기본 그릇에 많은 재료를 담고 맛있게 먹은 후 모자라면 다른 그릇에 다시 재료 담기!

 

 

ArrayList 생성법

 

다른 참조형 변수와 똑같이 new 키워드로 생성.

ArrayList<기본형타입> 변수명 = new ArrayList<>();

 

 

ArrayList 기능

 

1. 추가 : add (추가할 값)

2. 수정 : set (수정할 순번, 수정할 값)

3. 삭제 : remove (삭제할 순번)

4. 전체 값 제거 :  clear( );

 

ArrayList<Integer> intList = new ArrayList<>();

intList.add(1);
intList.add(2);
intList.add(3);

// System.out.println(intList.get(0)); // fifo 선입선출

// 2번째 있는 값 2를 변경해보자
// intList.set(1, 10);
// System.out.println(intList.get(1)); // 10

System.out.println(intList.get(0));

// 삭제
intList.remove(0); // 첫번째 값이 1이었는데 삭제되서 2, 3 만 남아서 2가 첫번째 값이 되었다
System.out.println(intList.get(0)); // 2

System.out.println("클리어 전");
System.out.println(intList.toString()); // [2, 3]
intList.clear();
System.out.println("클리어 후");
System.out.println(intList.toString()); // [] 빈 배열

 

 

LinkedList 링크드리스트

 

메모리에 남는 공간을 요청해서 여기 저기 나누어서 실제 요소를 담아놓는다.

 

✓ 실제 값이 들어있는 공간의 주소값으로 목록을 구성하고 저장한다.

 

📌 주의점 

1. 값을 여기저기 나누어서 저장하기 때문에 조회하려면 나누어져 있는 것을 모아서 조회해서 속도가 느리다.

2. 값을 나누어 놨기 때문에 값을 추가하거나 삭제할 때는 빠르다.

 

 

LinkedList 생성법

 

✅ 다른 참조형 변수와 똑같이 new 키워드로 생성.

 LinkedList<기본형타입> 변수명 = new LinkedList<>();

 

 

LinkedList  기능

 

1.  추가 : add (추가할 값)

2. 수정 : set (수정할 순번, 수정할 값)

3. 삭제 : remove (삭제할 순번)

4. 전체 값 제거 :  clear( );

 

LinkedList<Integer> intList = new LinkedList<>();

intList.add(4);
intList.add(10);
intList.add(20);

System.out.println(intList.get(0)); // 4
System.out.println(intList.get(1)); // 10
System.out.println(intList.get(2)); // 20

System.out.println(intList.toString()); // 조회할 때는 속도가 ArrayList보다 현저히 느림

intList.add(200);
System.out.println(intList.toString()); // [ 4, 10, 20, 200 ]

intList.add(2,15);
System.out.println(intList.toString()); // [ 4, 10. 15, 20, 200 ]

intList.set(1,30);
System.out.println(intList.toString()); // [ 4, 30, 15, 20, 200 ]

intList.remove(1);
System.out.println(intList.toString()); // [ 4, 15, 20, 200 ]

 

 

Stack 스택

 

✓  바구니. 수직으로 값을 쌓아 놓고 뺄 수 있는 자료 구조. 

 

✓  최근 저장된 데이터를 나열하고 싶거나, 데이터의 중복 처리를 막고 싶을 때 사용.

 

 

 

Stack 생성법

 

✅ 다른 참조형 변수와 똑같이 new 키워드로 생성.

Stack<기본형타입> 변수명 = new Stack<>()

 

 

Stack 기능

 

1.  추가 : push (추가할 값)

2. 조회 : peek. 최상위에 앃여있는 값, 즉, 제일 마지막에 넣은 값을 조회. 

3. 값 꺼내기  : pop. 제일 마지막에 넣은 최상위 값을 꺼냄. 꺼내면 삭제된다. 

 

Stack<Integer> intStack = new Stack<>();

intStack.push(1);
intStack.push(10);
intStack.push(30);

// isEmpty -> 모든 요소가 없으면 반환. !false => true 있는게 없어져야
while (!intStack.isEmpty()) {
    System.out.println(intStack.pop()); // 제일 마지막에 집어넣은 데이터부터 꺼내기. 30, 10, 1
}

intStack.push(1);
intStack.push(10);
intStack.push(30);

//peek
System.out.println("-------------------");
System.out.println(intStack.peek()); // 제일 마지막에 넣은 데이터가 출력. 30
System.out.println(intStack.size()); // 스택의 크기 3

 

 

Queue 큐 

 

✓  빨대처럼 한쪽에서 데이터를 넣고 반대쪽에서 뺄 수 있는 집합. FIFO(First In First Out)

 

Queue 생성법 

 

참조형 변수이지만 new 키워드로 생성할 수 없어서 링크드리스트를 사용한다. 

Queue<기본형타입> 변수명 = new LinkedList<>()

 

 

Queue 기능

 

1.  추가 : add (추가할 값)

2. 조회 : peek. 최상위에 앃여있는 값, 즉, 제일 마지막에 넣은 값을 조회. 

3. 값 꺼내기  : poll. 첫번째에 넣은 값부터 꺼내기. 꺼내고 나면 삭제된다. pull 인줄 알았는데 poll 이었다.

 

Queue<Integer> intQueue = new LinkedList<Integer>();

intQueue.add(1);
intQueue.add(5);
intQueue.add(10);

while (!intQueue.isEmpty()) {
    System.out.println(intQueue.poll()); // 값을 꺼내기. 1, 5, 10
}

// 다시 값 추가
intQueue.add(1);
intQueue.add(5);
intQueue.add(10);

// peek
System.out.println(intQueue.peek()); // 1. 첫번째 넣은 데이터가 첫번째로 나와야됨

 

 

Set 세트

 

✓  순서가 없는 대신에 중복을 허용하지 않도록 사용하는 자료 구조. 그냥 중학교때의 집합

 

✓  그냥 사용할 수 있고 HashSet, TreeSet으로 응용해서 사용 가능

 

 

Set 생성법 

 

 참조형 변수이지만 new 키워드로 생성할 수 없어서 HashSet를 사용한다. 

Set<기본형타입> 변수명 = new HashSet<>()

 

 

Set 기능

 

1. 추가 : add (추가할 값)

2. 삭제 : remove. 최상위에 앃여있는 값, 즉, 제일 마지막에 넣은 값을 조회. 

3. 값이 있는지 포함 확인  : contains (포함 확인할 값). 포함되어 있으면 true, 없으면  false.

 

Set<Integer> intSet = new HashSet<>();

    intSet.add(5);
    intSet.add(9);
    intSet.add(1);
    intSet.add(12);
    intSet.add(1);
    intSet.add(12);

    for (Integer value : intSet) {
        System.out.println(value); // 1, 5, 9, 12. 중복된 값은 제외
    }

    // contains : 값을 포함하고 있으면 true, 없으면 false
    System.out.println(intSet.contains(2)); // false
    System.out.println(intSet.contains(5)); // true
}

 

 

Map 맵

 

✓   키 - 값의 형태로 데이터를 저장하기 때문에 키 값을 기준으로 값을 조회할 수 있다.

 

✓   Map 의 키는 중복을 허용하지 않는 unique 한 값이다.  

 

Map 생성법 

 

 참조형 변수이지만 new 키워드로 생성할 수 없어서 HashSet를 사용한다. 

Map<키 타입, 값 타입> 변수명 = new HashMap<>()

 

 

Map 기능

 

1. 추가 : put (추가할 키 값, 추가할 값)

2. 값 조회 : get (조회할 키 값)

3. 전체 키 조회  : KeySet ( );

4. 전체 값 조회  : values ( );

5. 삭제 : remove (삭제할 키 값)

 

Map<String, Integer> intMap = new LinkedHashMap<>();

// 키 값 put
intMap.put("일", 11);
intMap.put("이", 12);
intMap.put("삼", 13);
intMap.put("삼", 16); // 중복 key

// key 값 전체 출력
for(String key : intMap.keySet()) {
    System.out.println(key); //  일 이 삼
}

for(Integer value : intMap.values()) {
    System.out.println(value); // 11 12 16. 삼은 중복 키라서 마지막에 넣은 갑으로 덮어쓰기됨
}

System.out.println(intMap.get("삼")); // 16

 

 

⭐ 느낀점과 다음 할 일 

월요일이라 기운없고 공부하기 싫다. 그런데 다른 스터디 팀원들은 5주차 강의에서 벌써 4주차 듣고 있다고 한다.. 그래서 더욱 열심히 하기로 했다. 

 

 

 

 

728x90