*collection
* 배열은 크기가 한번 정해지면 바뀌지 않는다.
- Collection은 데이터를 계속 집어 넣을 수 있다. (Collection은 자체적으로 데이터를 계속 넣어준다. )
추가 : add(Object) : boolean (추가가 성공하면 return true, 실패하면 return false)
삭제 : remove(Object) : boolean (삭제가 성공하면 return true, 실패하면 return false)
조회 : X -> iterator() : Iterator
크기 : size() : int ->관리하는 객체의 수
확인 : contains(Object) : boolean -> 인수로 받은 객체가 collection 안에 있는지 조회.
삭제 : clear() -> 컬렉션 내의 모든 객체 삭체
- Collection<<interface>> -> 값만 모음 - Set : 중복허용(X)
순서(X)
- ~Set - HashSet - 그냥 모으는것.
TreeSet - 정렬이 필요한 것.
- List : 중복허용(O)(ex : 똑같은 것을 담을 수 있다.)
순서(O)(ex : 칸막이가있다.index번호가 생김.배열과 비슷)
- ~List - Vector
- ArrayList(List 중 가장 많이 쓰임) : 전체조회시 좋음.
- LinkedList : data를 삽입, 삭제시 좋음.
List : - 추가 : add(int idx, Object) - 삽입(데이터를 데이터 중간에 넣어주는 것.중간에 값을 넣어주고 데이터가 하나씩 밀려난다.)
->idx = 객체를 삽입할 index
- List는 중간 idx에 null이 있으면 에러가 난다.
- 수정 : set(int idx, Object) - 교체
- 구문 : list.Set(2,a);
- 삭제 : remove(int 삭제할 idx) : Object
->특정 idx의 객체를 삭제하고 그 객체를 return
- 조회 : get(int idx) : Object
->특정 index의 객체를 return ->조회
- indexOf(Object) : int
->인수로 받은 객체의 index(중복된 idx의 0번 idx부터 찾음)를 알려준다.
- lastIndexOf(Object) : int
->인수로 받은 객체의 index(중복된 idx의 마지막 idx)를 알려준다. (ps. 대신 중간에 있는 것은 찾을 수 없다.)
* List ->list -> ArrayList의 객체.
배열 0 ~ length
for(int i=0;i<list.size();i++){
Object o = list.get(i);
}
//향상된 for문)
for(Object o : list){
s.o.p(o);
}
- Map<<interface>> -> 키->값을 쌍으로 모음. key - value
* HashSet ex :
project : day19
package : collection.set
class : SetTest
package collection.set;
import java.util.HashSet;
import java.util.TreeSet;
public class SetTest {
public static void main(String[] args) {
// Set - Collection 계열(값만 저장) - 순서 : X, 중복허용 : X
// HashSet, TreeSet(정렬기능)
HashSet set = new HashSet();
// 추가
set.add("홍길동");
set.add("이순신");
set.add("유재석");
set.add("박명수");
System.out.println(set);// [객체.toString(), 객체.toString()]
// 출력 [박명수, 이순신, 홍길동, 유재석] // 이걸 보면 순서가 없다는 것을 알 수 있다.
boolean flag = set.add("이순신");
System.out.println(flag + " : " + set);// 중복허용이 안되서 false가 들어가고, 값이 안들어가
// 있는 것을 볼 수 있다.
System.out.println("총 객체의 수 : " + set.size()); // 삭제전 총 객체의 수
// 삭제
flag = set.remove("박명수");
System.out.println("박명수 삭제 여부 - " + flag + " : " + set);
System.out.println("총 객체의 수 : " + set.size());// 삭제 후 총 객체의 수
System.out.println("------------TreeSet------------");
TreeSet tSet = new TreeSet(); // 출력 : [길성준, 노홍철, 박명수, 유재석, 정준하, 정형돈, 하하]
// 내부적으로 ㄱ,ㄴ,ㄷ,ㄹ식으로 정렬되어 나온다.
tSet.add("유재석");// 정렬기능이 필요할 때 쓴다.
tSet.add("박명수");
tSet.add("노홍철");
tSet.add("정형돈");
tSet.add("길성준");
tSet.add("정준하");
tSet.add("하하");
System.out.println(tSet);
flag = tSet.contains("정형돈");// tSet에 정형돈 값을 가지는 String 객체가 있는지를 조회
System.out.println("정형돈 객체 유무 : " + flag);// 정형돈이 tSet에 들어가 있어서 true가
// 출력된다.
// 향상된 for를 이용해 전체 데이터(객체)들 조회 - jdk1.5이상 사용가능.
for (Object o : tSet) {
System.out.println(o);
}
flag = tSet.isEmpty();// 컬렉션의 size()가 0이면 true
System.out.println(flag);// tSet에 데이터가 들어가 있으므로 false가 출력
if (!flag) {// tSet이 비어 있지 않으면
tSet.clear();
}
System.out.println("clear() 후 : " + tSet+", tSet.size() : "+tSet.size()); //컬렉션 내 모든 객체를 remove
tSet.add(1);//TreeSet의 경우는 같은 데이터만 들어가고 HashSet은 다른 타입도 들어간다.
tSet.add(2);//기본타입데이터(프리미티브 타입)를 추가 하는 것은 jdk1.5 이상에서만 가능
tSet.add(3);
tSet.add(4);
// tSet.add("abcde");
// tSet.add(true);
tSet.add(new Integer(5));//jdk 1.4이하에서의 추가 방법
System.out.println(tSet);
}
}
---------------------------------------
=====================================================================
project : day19
package : collection
class : Lotto
package collection;
import java.util.HashSet;
import java.util.TreeSet;
public class Lotto {
public static void main(String[] args) {
//1~45의 숫자중 중복하지 않는 숫자 6개를 만들어 출력하시오.
//[5,23,1,8,9,14]
//랜덤한 숫자
//숫자 - 6개
//중복되지 않는 숫자를 어떻게 모을 것인가.
TreeSet ts = new TreeSet();
int cnt = 0;
//while로 하는 방법
while(true){
ts.add((int)(Math.random()*45+1));
//System.out.println(hs.size());
cnt++;
if(ts.size()==6){
break;
}
}
System.out.println("반복 횟수 : "+cnt);
System.out.println("로또 예상 : "+ts);
ts.clear();
cnt=0;
while(ts.size()<6){
cnt++;
ts.add((int)(Math.random()*45+1));
}
System.out.println("반복 횟수 : "+cnt);
System.out.println("로또 예상 : "+ts);
//for로 하는 방법
// for(;ts.size()<6;){
// ts.add((int)(Math.random()*45+1));
// }
// System.out.println(ts);
}
}
* project : day19
package : collection.list
class : ArrayListTest
package collection.list;
import java.util.ArrayList;
public class ArrayListTest {
public static void main(String[] args) {
arraylistBasic();
}
public static void arraylistBasic(){
ArrayList list = new ArrayList(); //배열에 몇개 들어갈지 모르겠다 하면 이렇게 선언하고 딱 몇개 들어갈지 알면 아래와 같이 생성하는게 좋다. 수행시간이 짧아진다.
//ArrayList list = new ArrayList(10);//초기 length(저장할 수 있는 크기)
//추가
list.add("유재석");
list.add("박명수");
list.add("정준하");
list.add("노홍철");
System.out.println(list);
//조회 - get(int idx) : Object - index의 시작 : 0
String str = (String) list.get(0);
System.out.println(str);
System.out.println("-----전체 조회 패턴-----");
//전체 조회 패턴
for(int idx=0;idx<list.size();idx++){
System.out.println(list.get(idx));
}
System.out.println("-----향상된 for문 이용 조회 1.5 이상----------");
for(Object o : list){
System.out.println(o);
}
System.out.println("-----삭제----------");
boolean flag = list.remove("유재석");
System.out.println("삭제여부 : "+flag+" - "+list);
Object obj = list.remove(1);
System.out.println("삭제된 객체 : "+obj);
System.out.println("삭제여부 : "+flag+" - "+list);
}
}
* project : day19
package : collection.dto
class : PersonDTO
package collection.list;
import java.util.ArrayList;
import collection.dto.PersonDTO;
public class ArrayListTest {
public static void main(String[] args) {
// arraylistBasic();
arraylistDTO();
}
public static void arraylistDTO() {
ArrayList list = new ArrayList();
PersonDTO pdto = new PersonDTO("id-1", "홍길동", 20, "서울");
list.add(pdto);
list.add(new PersonDTO("id-2", "이순신", 30, "인천"));
list.add(new PersonDTO("id-3", "강감찬", 40, "부산"));
list.add(new PersonDTO("id-4", "김유신", 50, "천안"));
for (int idx = 0; idx < list.size(); idx++) {
Object obj = list.get(idx);
System.out.println(obj.toString());
}
System.out.println("-------이름들만 출력 getName()---------");
for (int idx = 0; idx < list.size(); idx++) {
PersonDTO obj = (PersonDTO) list.get(idx);
System.out.println(obj.getName());
}
System.out.println("-------향상된 for문을 이용해 나이만 출력---------");
for (Object o : list) {
// PersonDTO pto = (PersonDTO)o;
// System.out.println(pto.getAge());
System.out.println(((PersonDTO) o).getAge());
}
}
public static void arraylistBasic() {
ArrayList list = new ArrayList(); // 배열에 몇개 들어갈지 모르겠다 하면 이렇게 선언하고 딱 몇개
// 들어갈지 알면 아래와 같이 생성하는게 좋다. 수행시간이
// 짧아진다.
// ArrayList list = new ArrayList(10);//초기 length(저장할 수 있는 크기)
// 추가
list.add("유재석");
list.add("박명수");
list.add("정준하");
list.add("노홍철");
System.out.println(list);
// 조회 - get(int idx) : Object - index의 시작 : 0
String str = (String) list.get(0);
System.out.println(str);
System.out.println("-----전체 조회 패턴-----");
// 전체 조회 패턴
for (int idx = 0; idx < list.size(); idx++) {
System.out.println(list.get(idx));
}
System.out.println("-----향상된 for문 이용 조회 1.5 이상----------");
for (Object o : list) {
System.out.println(o);
}
System.out.println("-----삭제----------");
boolean flag = list.remove("유재석");
System.out.println("삭제여부 : " + flag + " - " + list);
Object obj = list.remove(1);
System.out.println("삭제된 객체 : " + obj);
System.out.println("삭제여부 : " + flag + " - " + list);
}
}