Collection Interface 를 최상위로 하는 자료구조이다 동일한 Interface를 구현받는 클래스들끼리 메서드 사용법이 유사하다.
- 초기 선언시 크기를 설정하지 않아 유연한 사용이 가능하다(크기가 거의 무한하다)
// ArrayList : 배열과 기본적으로 같다.
// 크기가 무제한 이다.
// <> 은 제너릭이라고 하는데, 특정 데이터 타입만 받겠다고 하는 선언이다.
// 제너릭에 데이터타입은 클래스형 데이터 타입만 가능 하다(int -> integer)
private static ArrayList<String> list = new ArrayList<String>(10);
public ArrayList<String> getList(){
return list;
}
public void addList(String todo) {
// array[0] = todo;
list.add(todo); // list의 가장 뒤에 들어간다.
// list.add(0,todo) <- 특정 인덱스에 넣을수도 있지만 이렇게 사용하는 경우는 드물다.
System.out.println("0 번 인덱스의 값 : "+list.get(0));
}
public void delList(String idx) {
//list.remove(index) : 지운값 반환
//list.remove(value) : 지웠는지 여부 반환
int index = Integer.parseInt(idx);
String val = list.remove(index);
System.out.println(index+" 인덱스의 값 지움 : "+val);
//배열은 일반 출력문으로 값을 볼수 없지만, Collection Framework는 볼 수 있다.
System.out.println(list);
Vector 는 List를 구현받는 class로 ArrayList와 사용법이 거의 동일하지만 사용중에 다른이의 접근을 막는다는 차이점이 있다.
//추가
public void addList(String todo) {
list.add(todo);
}
public Vector<String> getList(){
return list;
}
//삭제
public void delList(int idx) {
list.remove(idx);
}
//비우기
public void clearList() {
if(list.isEmpty()==false) {// 비워져 있지 않으면...
list.clear(); // 비운다.
}
}
//수정
public void setList(int idx, String val) {
list.set(idx, val); // idx 인덱스에 값을 val로 덮어써라
<> 은 제너릭이라고 하는데, 특정 데이터 타입만 받겠다고 하는 선언이다.
- 여러 타입을 지정 할 수 있다.
- 객체화 할 때마다 유연하게 클래스 내 데이터 타입을 지정 할 수 있다.
public class GBox<T> { //아직 지정되지 않은 타입
public class MBox<N,A,G>{//여러개도 가능하다
//빈 규약 : 데이터를 담는 자바파일(클래스)은 private 으로 필드를 지정해야 한다.
// T 의 타입이 지정되면 필드들의 타입도 자동으로 지정되게 된다
// 제너릭 안의 임시 타입의 문자는 아무렇게나 지정할 수 있다.
// 다형성 : 상속받은 클래스가 부모 클래스 형태로 들어가는 것
// 다형성2: 구현받은 클래스가 해당 인터페이스 형태로 들어가는 것
static Set<String> set = new HashSet<String>();
//static 을 사용하지 않으면 매번 객체화시 새로운 복사본을 가져오기때문에 초기화 된다.
/*Set 역시도 List 와 함께 Collection Interface 를 구현받고 있어
* 사용하는 메서드가 같다.
* add() : 추가 , remove() : 삭제, size() : 크기확인, clear() : 로 비울 수 있다.
* 하지만 순서가 없는 Set 특성상 get(index) 을 사용 할 수 없다.
*/
public List<String> addData(String val) {
List<String> list = new ArrayList<String>();
// 데이터 추가
set.add(val);
//set 은 중복데이터가 들어오면 덮어쓰는 것이 아니라 받지 않는다.
System.out.println("set 안의 데이터 갯수 : "+set.size());
// 데이터 꺼내기
// 1. Set 을 하나씩 꺼낼수 있도록 쪼개기
Iterator<String> iter =set.iterator();
// 2. 꺼낼 값이 있으면 하나씩 꺼내기
while(iter.hasNext()) {
list.add(iter.next());
}
return list;
}
static Set<Member> members = new HashSet<Member>();
// class도 사용 가능 하다.
public List<Integer> addInstance() {
// 데이터 넣기
members.add(new Member());
System.out.println(members.size());
/*데이터 출력
Iterator<Member> iter = members.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}*/
List<Integer> list = new ArrayList<Integer>();
for (Member member : members) {
// hashcode : 객체의 일련번호만 확인
//System.out.println(members.hashCode());
list.add(member.hashCode());
}
// 1. List 에 일련번호를 넣는다.
// 2. Controller 로 반환 한다.
// 3. Controller -> view 로 전송 한다.
// 4. view 에서 해당 내용을 출력 한다.
return list;
// 1개의 파일에 1개 이상의 클래스를 만들 수 있다.
// 1개 파일에 1개의 클래스 권장.
// 다만 public 접근제한자는 1개의 클래스만 가질 수 있다.
class Member{
}
set 과의 중복 차이점은 받지 않는 것이 아니라 덮어 씌운다.
public class ScoreModel {
// 제너릭에 키와 값에 대한 데이터 타입을 넣을 수 있다.
static Map<String, Integer> map = new HashMap<String, Integer>();
public void insert(String key, int value) {
// 데이터 추가
map.put(key, value);// 키에 대한 중복을 허용하지 않음(덮어 쓴다)
// 사이즈 확인
System.out.println(map.size());
}
public Map<String, Integer> list() {
/* map 에서 데이터를 출력하는 방법 1.- 키만 Set 으로 가져와 key 를 따로 추출해 값을 찾는 방식
Set<String> keys = map.keySet();
Iterator<String> iter = keys.iterator();
while(iter.hasNext()) {
String key = iter.next();
int val = map.get(key);
System.out.println("key :"+key+"/ val :"+val);
}*/
/*map 에서 데이터를 출력하는 방법 2. - 향상된 for 활용 (1번을 좀 더 쉽게)
Set<String> keys = map.keySet();
for (String key : keys) {
System.out.println(key+":"+map.get(key));
}
*/
/* map 에서 데이터를 출력하는 방법 3. - 키:값 을 한쌍으로 Set으로 가져와 각각 추출하는 방식
Set<Entry<String, Integer>> entrySet =map.entrySet();
Iterator<Entry<String, Integer>> iter = entrySet.iterator();
while(iter.hasNext()) {
Entry<String, Integer> entry = iter.next();
System.out.println(entry.getKey()+":"+entry.getValue());
*/
// jstl 으로 해결하는 법
return map;
}
public void remove(String key) {
if(map.get(key) !=null) {
map.remove(key);
}
//map.replace(key,value) : 수정 하는 메서드
//map.clear() : map 을 비우는 메서드
}
}