-
8일차 - 컬렉션 프레임워크프로그래밍 언어/자바(JAVA) 2024. 2. 1. 16:58
Collection Framework
자바의 Collection Interface 를 최상위로 하는 자료구조이다 Map의 경우 Collection 인터페이스를 상속받고 있지 않지만 Collection으로 분류된다
자식 인터페이스(List, Set, Map)
최상위 구현된 클래스 중복 순서 성능 Collection List ArrayList O X LinkedList 보단 검색 시간이
상대적으로 빠르다LinkedList 빈번한 객체 추가, 삭제할 때
높은 효율Vector ArrayList 와 동일 Set HashSet X X contains 의 성능은 O(1)으로
탁월하다Map HashMap key: X
value: OX HashTable Properites 자바 I/O 단계에서 이해가능함 선언 시 크기를 지정하지 않고, 입력받은 크기에 따라서 늘어난다
MAP을 제외한 List, Set 은 상위 인터페이스가 Collection 이므로 사용 메소드가 동일하다
Collection 관련 메소드
메소드 반환타입 설명 add(E e) boolean (실패 성공) 입력한 요소를 컬렉션에 모두 추가한다 addAll(Collection<?>) boolean (실패 성공) 입력받은 컬렉션의 모든 요소들을 컬렉션 객체에 모두 추가한다 clear() void 컬렉션 객체의 모든 요소를 제거한다 contains(Object) boolean (검색 결과) 컬렉션 객체의 요소들 중 포함되어 있는지의 여부를 반환한다 equals(Object) boolean (비교 결과) 컬렉션 객체와 매개변수 Object의 동일한지 여부를 반환한다 isEmpty() boolean 컬렉션 객체가 비어있는지 여부를 반환한다 remove(Object) boolean (실패 성공) 컬렉션 객체 중 Object 와 동일한 요소를 제거한다 size() int 컬렉션 객체의 요소 개수를 반환한다 List
ArrayList
■ <> 를 제너릭이라고 한다 안에 데이터 타입을 넣어, 어떤 데이터를 사용하는지 명시해줘야한다
■ 상위 인터페이스인 List 에 다형성에 의해서 ArrayList 가 들어갈 수 있다
■ 배열과 달리 공간의 크기를 할당하지 않아도 부족해지면 공간을 늘려준다
public static void main(String[] args) { // <> 를 제너릭 이라고 한다 // <> 안에 데이터 타입을 넣어서, 해당 클래스 안에서 어떤 데이터를 사용하는지 명시 해준다 // 단, 데이터 타입은 반드시 클래스 형태로 들어가야한다 int(x), Integer(O) ArrayList<String> list = new ArrayList<String>(); // 크기 지정이 가능하다 // 지정된 크기를 넘어서도 괜찮다 ArrayList<String> arr = new ArrayList<String>(10); // ArrayList 는 List 구현하는 클래스이므로, 다형성에 의해서 들어가는 것이다 // 다형성이란 부모 형태에 자식 객체가 들어가는 것을 말한다 List<Integer> list2 = new ArrayList<Integer>(); arr.add("a"); arr.add("c"); arr.set(1, "b"); System.out.println(arr); // 배열이면 안에 있는 주소값을 보여주지만 컬렉션 프레임워크는 안에 저장된 값을 보여준다 // > [a,b,c] arr.remove("a"); System.out.println(arr); // > [b,c] }
ArrayList 형변환
캐스팅처럼 하진 않고, 바꾸는 방법이 따로 있다 아래에 설명 있음
public static void main(String[] args) { // array 를 리스트로 바꾸고 ArrayList 로 바꾸어줘야한다 String[] arr = {"List","Map","Set"}; // Array -> List 형변환 List<String> list = Arrays.asList(arr); // Array 를 List 로 변환하고 나면 수정은 불가능하다 // List -> ArrayList 형변환 ArrayList<String> arrList = new ArrayList<String>(); arrList.addAll(list); // Collection 형태 객체를 넣으면 arrList 에 전체요소들을 추가한다 System.out.println(arrList); > [List, Map, Set] }
Vector
ArrayList와 동일하지만 다수 유저의 동시 접근을 막는다
Set
HashSet
■ 요소들의 순서와 중복이 없다 중복되는 요소의 추가가 불가능하다
■ 동일한 클래스 객체를 추가해도 객체는 클래스의 복사본일뿐 서로 다른 일련번호를 가지고 있어 중복이 아니다
■ Set의 요소들을 Iterator로 하나씩 꺼내는 방법과 향상된 for 문으로 출력 할 수 있다
public static void main(String[] args) { // List, Set 은 Collection 인터페이스를 상속 받은 인터페이스로 구현되어있어서 사용 방법이 동일하다 HashSet<String> set = new HashSet<String>(); set.add("JAVA"); set.add("JSP"); set.add("MARIA"); set.add("SPRING"); set.add("JAVA"); // "JAVA" 중복임 System.out.println(set); // > [JAVA, SPRING, JSP, MARIA] // 내부적으로 요소들의 순서는 없다 System.out.println(set + " : " + set.size()); HashSet<Member> member = new HashSet<Member>(); // new 키워드는 클래스의 복사본이라 // 두 객체는 같지 않고, 복사본이기 때문에 다르다 // 두 객체의 내용이 같을 수는 있어도 객체의 주소값이 다르다 member.add(new Member()); member.add(new Member()); System.out.println(member); System.out.println(member.size()); // > 2 // 요소 삭제 set.remove("MARIA"); // Set의 요소를 하나씩 뽑아내는 방법 두가지 // 첫번째 방법 : Iterator 로 이용해 Iterator<String> iter = set.iterator(); // 한 덩어리(set) 을 쪼개 Iterator 로 만들었다 while (iter.hasNext()) { // 가져올 값이 있는지 (true/false) System.out.println(iter.next()); // 쪼개진 조각을 하나씩 가져온다 } // 두번째 방법 : 향상된 for 문 // set 을 넣으면 알아서 쪼개준다 for (String s : set) { System.out.println(s); } }
Map
■ Key의 값이 문자열로 되어있고, 순서나 중복이 없다
■ Map.Entry 는 키와 값의 쌍으로 이루어진 자료구조이다 getValue(), getKey() 로 키와 값을 반환해준다
// HashMap 은 Map 인터페이스를 구현받기 때문에 Map 에 들어갈 수 있다(다형성) // 필드 다형성 Map<String, Integer> map = new HashMap<String, Integer>(); // 데이터 추가 put() map.put("Kim", 23); map.put("Lee", 26); map.put("Park", 26); // Value 의 중복은 상관 없다 map.put("Kim", 30); // Key 의 중복은 기존 Key의 Value 값을 덮어씌우기한다 System.out.println(map); // 크기 알아보기 System.out.println("map 의 크기 : " + map.size()); // 단일 값 호출 System.out.println("Lee의 값 : " + map.get("Lee")); // 삭제 (삭제 후 삭제한 값을 보여준다) map.remove("Lee"); System.out.println(map); // 1. iterator // map 에서 key 만 set 덩어리로 가져온다 Set<String> keySet = map.keySet(); // 하나씩 꺼낼 수 있도록 iterator 화 한다 Iterator<String> iter = keySet.iterator(); while (iter.hasNext()) { String key = iter.next(); System.out.println(key + " : " + map.get(key)); } // 2. 키를 이용해 값을 찾는다 Set<Entry<String, Integer>> entrySet = map.entrySet(); // 자르기 좋게 Iterator 화 한다 Iterator<Entry<String, Integer>> iter = entrySet.iterator(); // 꺼내온 Entry 로 부터 키와 값을 꺼낸다 while(iter.hasNext()) { // 엔트리에서 키와 값으로 분리시켜 놓는다 Entry<String, Integer> entry = iter.next(); System.out.println(entry.getKey() + " : " + entry.getValue()); }
'프로그래밍 언어 > 자바(JAVA)' 카테고리의 다른 글
10일차 - Java I/O (0) 2024.02.05 9일차 - Iterator (0) 2024.02.02 8일차 - 예외, 에러 (0) 2024.02.01 7일차 - String(스트링) (0) 2024.01.31 5일차 - 상속, 다형성 (0) 2024.01.29