반응형
01. 자료구조 관련 클래스
- Collection Class
- 데이타 수집 클래스
- 다수의 객체를 효율적으로 저장하고 관리하기 위한 기능을 제공하는 클래스
- 객체 하나만 저장하는 것이 아님!!!
- Set인터페이스 , List인터페이스 , Map인터페이스 중 하나를 상속받아 작성된 자식클래스
- 어떤 인터페이스를 상속받느냐에 따라 기능이 달라짐
- 각각의 클래스마다 자료구조 특징들이 있으므로 상황에 따라 적절히 이용
1. Set & List 인터페이스
//Set과 List는 **Collection인터페이스를 상속받기 때문에** 가진메소드들이 거의 비슷함!!
Interface Set<E> implements Interface Collection<E>
Interface List<E> implements Interface Collection<E>
2. Map 인터페이스
//Map은 완전히 다름!!
Interface Map<K,V>
02. Set인터페이스
- Set인터페이스를 상속받은 자료구조 자식클래스
- Module java.base >> Package java.util >> Interface Set<E>
- (웹프로그램에서는 많이 사용 안함)
1. Set인터페이스 종류
- 같은 부모이기 때문에 가진 메소드는 비슷하나, 값(데이터)을 처리하는 방법이 내부적으로 조금씩 다름
- HashSet , TreeSet 등
- AbstractSet
- ConcurrentHashMap.KeySetView
- ConcurrentSkipListSet
- CopyOnWriteArraySet
- EnumSet
- JobStateReasons
- LinkedHashSet …
2. HashSet의 특징
- 객체의 저장 순서가 없음 - 순서x
- 메모리 주소와 저장된 값이 같은 객체 중복 저장 불가능 (only one) - 중복x
- 저장용량 늘어남
- 기본생성자호출 시 요소의개수 16개 생성됨
//공간이 넘어가면 (16 * 0.75)배 만큼 객체를 늘릴 수 있음
HashSet();
- 생성자로 저장용량 변경 가능
HashSet(int initialCapacity);
- 생성자로 증가배율 변경 가능
HashSet(int initialCapacity, float loadFactor);
- 생성자에 제네릭 상속 설정 가능
HashSet(Collection<? extends E> c);
03. List인터페이스
- List인터페이스를 상속받은 자료구조 자식클래스
- Module java.base >> Package java.util >> Interface List<E>
1. List인터페이스 종류
- 같은 부모이기 때문에 가진 메소드는 비슷하나, 값(데이터)을 처리하는 방법이 내부적으로 조금씩 다름
- ArrayList , Vector , LinkedList 등
- AbstractList
- AbstractSequentialList
- AttributeList
- CopyOnWriteArrayList
- RoleList
- RoleUnresolvedList
- Stack
2. ArrayList의 특징
- 배열과 같은점
- 일반적인 배열과 같은 순차리스트
- 첨자(Index)로 내부의 객체 관리
- 요소를 차례대로 저장
- 첨자(Index)를 이용하여 요소를 구분 - 순서o
- 첨자(index)로 값 저장 & 값 사용 가능
- 메모리 주소와 저장된 값이 같은 객체 중복 저장 가능 - 중복o
- 배열과 다른점
- 크기가 가변적으로 변하는 선형리스트
- 배열과 달리 객체들이 추가되어 저장 용량(capacity)을 초과하면, 자동으로 부족한 크기만큼 저장 용량(capacity) 늘어남
- ArrayList는 언제 사용하면 좋을까?
- 데이터 양이 일관적이고, 삽입과 삭제가 빈번하지 않을 때
- 단순히 저장과 삽입만 할 때
- 데이터의 접근 속도가 중요할때
3. ArrayList VS Vector
- 내부적으로 동일하게 데이터 처리
- 그냥 같다고 보면 됨!
- ArrayList
- 동기화처리되지 않은 일반 메소드 가짐
- 앞으로 웹프로그램을 만들 때 많이 쓸 예정
- Vector
- 동기화처리된 메소드 가짐
- 다중스레드프로그램만들때 이용
- 특히, 다중스레드프로그램인데 데이터베이스 프로그램을 연동하지 않을 때 이용
- 그렇다면 Vector가 더 안전한데 왜 ArrayList를 많이 쓸 예정인가?
- 웹프로그램만들 때 자료구조클래스를 이용하는 이유는?
- 다수의 검색결과를 저장하기 위해서
- 또한 저장용량이 정해지지 않았는데, 배열처럼 사용 가능해서
- 즉,웹에서는 데이터베이스 프로그램도 함께 이용함
- 데이터베이스 프로그램 내부적으로 스레드 동기화와 동일한 기능을 가진 기능이 일어나기 때문에 우리가 따로 프로그램에 스레드 동기화를 할 필요가 없음!!!
- 즉, 웹프로그램만들 때는 데이터베이스 프로그램 연동이 필수라서 스레드 동기화 따로 하지 않아도되니 속도가 더 빠른 ArrayList를 사용하는 것!!
- 그렇다면 웹프로그램만들 때 디비 연동을 안할수도 있지 않은가? 절대 그럴 일은 없다!
- 웹프로그램만들 때 자료구조클래스를 이용하는 이유는?
4. LinkedList (일반LinkedList)의 특징
- ArrayList와 다르게 생긴 구조
- 값들이 모두 따로 떨어져 저장한 뒤, 메모리주소로 서로 연결
- 서로의 연결로 참조 가능
- 요소의 중간 삽입과 삭제가 매우 편함
- ArrayList와 Vector 중간 삽입하려면 요소를 하나씩 밀어야하지만, LinkedList는 주소만 변경하면됨
- LinkedList는 언제 사용하면 좋을까?
- 요소의 삽입과 삭제가 빈번한 경우
04. Map인터페이스
- Map인터페이스를 상속받은 자료구조 자식클래스
- Module java.base >> Package java.util >> Interface Map<K,V>
- 제네릭 2개, Key와 Value 제네릭 따로설정하기!!
Map<Key의 자료형 제네릭, Value의 자료형 제네릭>
1. Map인터페이스 종류
- 같은 부모이기 때문에 가진 메소드는 비슷하나, 값(데이터)을 처리하는 방법이 내부적으로 조금씩 다름
- HashMap , Hashtable , TreeMap , Properties 등
- AbstractMap, Attributes , AuthProvider , ConcurrentHashMap , ConcurrentSkipListMap , EnumMap , HashMap , Hashtable , Headers , IdentityHashMap , LinkedHashMap , PrinterStateReasons , Properties , Provider , RenderingHints , ScriptObjectMirror , SimpleBindings , TabularDataSupport , TreeMap , UIDefaults , WeakHashMap
2. HashMap의 특징
- 이름(key - 식별자)과 값(value - 객체)을 하나로 묶어 자료구조 클래스의 객체에 저장하여 사용
- 앞서 List는 값만 저장하고 첨자(index)로 접근했지만, Map은 값(Value)과 이름(Key)이 함께 묶어서 저장되기 때문에 이름(key)으로 접근하면 됨!
- 엔트리(Entry)
- 이름과 값을 하나로 묶어 사용하는 처리단위
- Map에서는 요소라는 용어 사용 대신 엔트리라고 부름
- HashMap은 언제 사용하면 좋을까?
- Map을 이용하면 이름을 이용해 값에 빠르게 접근할 수 있음
- 즉, 값의 검색속도 빠르므로 Heap에 들어있는 수많은 값들 중 원하는 값만을 빠르게 찾기 가능
- List는 Map에 비해 검색 속도가 느림
3. HashMap vs Hashtable
- 같은 클래스지만
- HashMap(일반메소드) 가짐
- Hashtable(동기화처리된메소드) 가짐
- 웹프로그램 만들 때는 HashMap(일반메소드) 많이 사용
4. Properties
- 많이 사용함
- Properties file : 값을 제공하는 파일을 읽어들여서 그 파일들을 Properties 객체로 만들어 사용함
- 파일처리 공부하고 사용할 예정..
- Map인터페이스 부모가 같기 때문에 유사한 기능들 가짐
반응형
'java > java.util & java.text' 카테고리의 다른 글
[java.util] 7. 학생 관리 프로그램 (Set,List,Map 활용) (0) | 2024.06.28 |
---|---|
[java.util] 6. HashSet 클래스 & ArrayList 클래스 & HashMap 클래스 (0) | 2024.06.27 |
[java.util] 4. Generic VS Non-Generic (0) | 2024.06.27 |
[java.text] 3. DecimalFormat 클래스 & SimpleDateFormat 클래스 (0) | 2024.06.26 |
[java.util] 2. Date 클래스 & Calendar 클래스 (0) | 2024.06.18 |