[ITWILL : JSP]자료구조1 : Collections Framwork(Set계열, List계열)
ITWILL학원 : 26강 JSP기초 BY 정규태강사
1. 컬렉션 클래스의 제네릭 (Collections.Generic)
- 컬렉션프레임워크 또는 컬렉션 클래스 또는 컨테이너라고도 부른다.
- 즉 값을 담는 그릇이라는 의미이다. 그런데 그 값의 성격에 따라서 컨테이너의 성격이 조금씩 달라진다. 자바에서는 다양한 상황에서 사용할 수 있는 다양한 컨테이너를 제공하는데 이것을 컬렉션즈 프래임워크라고 부른다.
- JDK5 버전이후부터 사용가능
- 자료구조 학문을 구현한 클래스이다.
- 요소라는 데이터를 가변인자의 객체에 저장하는 형태이다.
- 컬렉션 클래스들은 Collections 인터페이스의 하위 클래스/인터페이스이다.
- Collections인터페이스의 상위클래스는 Object클래스(최상위객체)이다.
- 컬렉션 클래스들은 toString()메서드가 구현되어있다.
- 공통 장점 :
- 데이터의 삽입, 삭제, 검색기능이 뛰어남.
- 주요 종류 :
- Set
- List
- Map(Table포함)
- 공통메서드 :
- 변수명.add : 데이터저장
- 변수명.get(index) : 배열의 index에 위치해 있는 값 출력
- 변수명.set(idx, 변경값) : 데이터변경
- 변수명.size() : 길이를 반환
- iterator()
2. Iterator
- Iterator는 반복자, 즉 반복문의 동작을 할 수 있는 인터페이스이다.
- 해당 컬렉션에서 현재위치, 다음단계로의 이동동작을 반복가능하게 한다.
- 모든 컬렉션클래스들은 슈퍼클래스의 iterator()메서드를 모두 사용가능하다.
- Iterator 패턴 : 디자인패턴중의 하나로 중급개발자로 가는 길목에 이다. [디자인패턴](https://gmlwj d9405.github.io/2018/07/06/design-pattern.html)은 필수이므로 꼭 따로 학습 해볼것
3. Set계열의 컬렉션 클래스
- 서로 다른타입의 데이터를 저장가능함. why? Object로 업캐스팅을 할 것이기때문에!
- 순서를 포함하지 않음
- 데이터 중복을 허용하지 않음.
- Set계열은 중복x, 순서정보가 없기때문에 반복문을 사용할 수가 없다 -> 반복문 대신 interator 사용
- 예 : HashSet 클래스 : Set 인터페이스를 구현한 서브클래스이다.
1 | public static void main(String[] args) { |
4. List계열의 컬렉션 클래스
- 서로 다른타입의 데이터를 저장가능함. why? Object로 업캐스팅을 할 것이기때문에!
- 순서가 저장됨 how? 저장할때 요소의 위치(index)값을 사용하기때문에!
- 요소의 위치는 배열처럼 0부터 접근하면 됨
- 데이터 중복 허용
- Set계열보다 List계열을 더 많이 사용함
- 예 : ArrayList, Vector, Stack, LinkedList
4-1. ArrayList
- 장점 : 고정길이 배열의 단점을 보완. 저장공간의 크기가 필요에 따라 자동으로 증가함.
가장 많이 사용한다.
- 예시 : ArrayList 데이터 입력 및 출력
1 | ArrayList list = new ArrayList(); |
- 예시 : ArrayList 반복문사용
순서(index)값이 저장되기때문에 Iterator가 아닌 반복문을 사용할 수 있다.
전체 데이터를 출력하는 반복문이다.
- System.out 대신 System.err 입력하면 에러형태(빨간글자)로 콘솔에 출력된다
1 | System.out.println("ㅡㅡㅡㅡㅡfor문"); |
- 예시 : index활용
1 | System.out.println("ㅡㅡㅡㅡㅡindexof 사용"); |
- 예시 : 조건에 따른 데이터변경(반복문 사용)
배열에 “2”가 있는 경우 “two”로 변경해보자
- 내코드
1 | //내코드 |
- 강사님코드
- indexOf()는 데이터가 존재할 경우 index값을 출력하고 없는 경우 -1을 출력한다.
1 | //강사님코드 |
- 비교 : 조건에 따른 데이터변경(Iterator사용)
- 다음요소를 가지고있으면 true->반복문실행 없으면 false->반복문종료
1 | //list객체를 반복할 수 있도록 iterator 객체로 변환 |
4-2. Vector
Vector : 자동으로 길이가 늘어나는 가변list
ArrayList - 동기화 기능 X : 상대적으로 클라이언트측에서 많이 사용함
Vector - 동기화 기능 O : 상대적으로 서버측에서 많이 사용함
거의 대부분이 ArrayList를 쓰는 상황이다. 주니어레벨에서는 잘 모르겠다싶으면 ArrayList를 사용하면 됨.
1 | //1. Vector 생성 |
4-3. 배열을 생성해보자
- 내코드
내코드는 for문을 사용했다.
1 | System.out.println("ㅡㅡㅡㅡㅡ 배열생성"); |
- 강사님코드
강사님은 for-each를 사용한 코드이다.
1 | double[] arr = new double[]{1.1,1.2,1.3,1.4,1.5,1.6,1.7}; |
4-4. 요소검색
1 | System.out.println("ㅡㅡㅡㅡㅡ요소검색"); |