자바로 구현된 자료 구조.
Collection계열, Map계열이 제공
Generic, Autoboxing, Unboxing이 지원
일차원 배열처럼 생성.
가변 길이형(저장된 데이터의 크기까지만 메모리를 사용)
이차원 배열처럼 생성
가변 길이형(열은 2열로 고정, 행만 변경)
일차원 배열처럼 생성
검색의 기능이 있으며, 중복데이터를 저장할 수 있다.
입력되는 값은 순차적으로 입력되고 나온다.(FIFO)
ArrayList, LinkedList, Vector가 존재
가변 길이형
일차원 배열처럼 생성
검색의 기능이 없으며 중복 데이터를 저장할 수 없다.
입력되는 값은 순차적으로 입력되지 않는다.
HashSet존재
가변 길이형
1. 생성
Set<데이터형> 객체명 = new HashSet<데이터형>();
2. 값 추가)
- 값은 순차적으로 입력되지 않는다.
- 중복 값은 추가되지 않는다.
set.add(값);
3. 크기)
set.size();
4. 삭제
set.remove(객체);//일치하는 객체가 존재하면 삭제
set.clear();//set의 모든 내용을 삭제
5. set이 비었는지?
set.isEmpty();
6. 배열로 복사(Generic이 사용된 경우만 복사 가능)
1.빈 배열 생성
데이터형[] 배열명 = new 데이터형[set.size()];
2. 배열에 복사
set.toArray(배열명);
1. Iterator에 제어권 할당
* Iterator<데이터형\> 객체명 = set.iterator();
2. 반복문을 사용하여 요소가 존재하는지 판단.
//다음 요소가 존재하는가?
while(ita.hasNext()){
//요소의 값을 얻고 포인터를 다음으로 이동
ita.next();
}
* 다음 존재 여부확인 : hasNext() //boolean
* 다음으로 이동 : next() //println으로 출력
이차원 배열처럼 생성
키와 값의 쌍을 가진 데이터 형
키를 가지고 값을 조회하는 자료구조
키는 중복되지 않고, 값은 중복될 수 있다.
같은 키가 입력되면, 이전 키에 덮여 쓴다.
입력되는 값은 순차적으로 입력되지 않는다.
HashMap, HashTable이 존재
multi-thread에서 동시접근 가능, 동기화 X -> 속도가 빠르다.
multi-thread에서 동시접근 가능, 동기화O -> 속도가 느리다.
데이터를 기존 데이터 사이에 추가하는 일이 빈번한 경우
1. 생성
* Generic을 사용하지 않은 경우 :
모든 값을 추가할 수 있다.
방마다 다른 값이 저장될 수 있다.
=> 입력은 편하지만 값을 꺼낼때 에러가 발생할 수 있다.
모든 JDK버전에서 사용가능(권장하지 않음)
List l = new ArrayList();
* Generic을 사용하는 경우:
지정한 값만 추가 가능.
List<데이터형> list = new ArrayList<데이터형>();
ArrayList<데이터형> list = new ArrayList<데이터형>();
ArrayList<데이터형> list = new ArrayList<>();
2. method 호출
시작주소, 데이터, 끝주소를 가지는 리스트 객체
List의 구현 클래스.
데이터가 기존의 데이터 사이에 추가되는 일이 빈번할 때 사용.
1. 생성
List<String\> 객체명 = new LinkedList<String\>();
List<String\> list = new LinkedList<String\>();
2. 값 할당
list.add("으엥"); //0
list.add("끄앙"); //1
list.add("흐헹"); //2
list.add(1, "느엑");//1번을 뒤로 밀고 자신이 들어감. //1이됨.
//1과 2의 주소를 끊고, "느엑" 데이터를 생성.
//생성된 데이터의 시작주소를 1의 끝주소로 덮었고, 2의 시작주소에 끝주소를 덮는다.
JCF에 기본형 데이터형을 입력하면 compiler가 자동으로 Wrapper class를 사용하여 객체로 생성하고 입력해주는 것.
Wrapper Class valueOf()사용하여 autoboxing
List list = new ArrayList();
list.add(Integer.valueOf(10));
int i = 10;
Integer ii=new Integer( i );
Integer ii=Integer.valueOf( i ); //ii.method 호출()
JCF의 입력데이터 형에 대한 제한을 설정할 때 사용.(하나의 값으로만 설정.)
List<Generic> list = new ArrayList<Generic>();
Map<Generic.Generic> map = new HashMap<Generic.Generic>();
1. 생성
List<Integer> list = new ArrayList<int>();
2. 값 할당
list.add(10);
list.add(Integer.valueOf(20)); //autoboxing
list.add(new Integer(30));
3. 값 사용
list.get(0) * 2
// unboxing이 되어 객체가 가지고 있는 값이 원래의 데이터 형으로 풀어져 나옴.
JCF에 입력된 기본형 데이터 형을 얻는 경우 Wrapper class에 저장된 값이 풀려서 얻어진다.
1. 값 설정
list.add(Integer.valueOf(2024));
2. 값 얻기
Integer value = list.get(0);
* 객체는 연산되지 않음.
int i = value.intValue();
i를 사용한 연산을 수행
i+10;
* 위의 식을 한줄로 하면
int value = (list.get(0)).intValue();
개발자가 Wrapper class의 method를 호출하지 않아도 기본형으로 풀어서 값을 반환해준다.
int i = list.get(0); => intValue() 생략
변수 = list.get(인덱스);
* 리스트 크기 얻기
list.size()
* 리스트 값 삭제 - 크기가 줄어든다.(가변 길이형)
list.remove(인덱스);
list.remove(객체);//처음 찾아진 방만 삭제
* 리스트 모든 방을 삭제
list.clear();
* 리스트의 값을 배열로 복사(Generic이 설정된 list만 복제된다.)
1. 리스트의 크기로 배열 생성
데이터형[] 배열 = new 데이터형[ list.size() ];
2. 리스트의 내용을 배열로 복사
list.toArray(배열);
사용자가 입력한 값을 받을 수 있는 javax.swing패키지에서 제공하는 객체
String 변수 = JOptionPane.showInputDialog("메시지", 초기값");
입력값이 변수에 저장 : 문자열만 가능.
String inputData = JOptionPane.showInputDialog("이름을 입력해주세요","홍길동");
StringBuilder sb = new StringBuilder();
if("윤웅찬".equals(inputData)) {
sb.append("조원동의 자랑 ");
}
sb.append(inputData).append("님");
System.out.println(sb);