자료구조
: 데이터를 어떻게 관리할 것이냐
제어권 : 구현로직은 똑같은데 메소드만 제한하면 되는 것.
package com.bit.day10;
public class Ex02 {
public static void main(String[] args) {
//자료구조의 분류
//집합(순서o, 순서x)
// list 순서o - 중복허용 (동일한 값이 들어가도 순서가 다르므로 구분 가능)
// 나한테 제어권o
// 제어권x
// set 순서x - 중복불허
}
}
-Array 리스트와 linked 리스트 모두 List 인터페이스를 상속받는다.
package com.bit.day10;
import java.util.ArrayList;
import java.util.List;
public class Ex03 {
public static void main(String[] args) {
//기본타입은 모두 boxing되어 들어가는 것이고, 나올때 unboxing
//ArrayList 또는 LinkedList 모두 List 인터페이스를 상속받고 있으므로 다형성에 의하여 메소드 호출
//각각의 리스트는 더 많은 기능이 있겠지만, 다형성에 의해 리스트에 선언돼있는 것만 쓸 수 있다.
List list=new ArrayList();
list.add(1111);
list.add("두번째");
list.add(true);
list.add('A');
list.remove(2); //인덱스 번호로 삭제
list.add(1, 3.14);
list.set(2, "세번째");
for(int i=0; i<list.size(); i++)
System.out.println(list.get(i));
// System.out.println(list.get(0));
// System.out.println(list.get(3)); //제어권은 나한테 있으니까 순서 마음대로 출력가능
// System.out.println(list.get(2));
// System.out.println(list.get(1));
// System.out.println(list.get(4)); index out bound exception
System.out.println("------------------------");
//다른타입 매개변수 - 다형성에 의해서 object를 인자로 받아도 호출가능.
list.add(1);
list.add("세번째");
list.add('A'); //Character class타입으로 들어가는 것.(boxing)
list.add(new Ex01()); //객체도 받는다 = 모두 다 오버라이딩한것이냐? 아니다. 원래 객체로 받는 것이다.
//add의 입장에서는 인자로 어떤 타입의 값이 올 지 알수없다.
//그래서 모든 클래스의 조상인 Object클래스 타입으로 인자를 받는다.
// list.remove(3.14); //값을 넣어 삭제도 가능. 원래 객체타입이지만 Double로 boxing되어 들어가고 나올때 다시 객체타입
// list.remove(1); //idx 번호가 우선순위를 갖는다.
// list.remove(65); //오류 : outbounds - 인덱스번호로 인식 (A를 찾지못함.)
ArrayList list2=new ArrayList();
list2.add("세번째");
// list.remove("세번째"); //처음에 있던 "세번째" 지워줌
// list.removeAll(list2); //한번에 다 지움
// System.out.println(list.contains("세번째")); //존재하면 true
// while(list.contains("세번째")){ //다 지우는 방법2
// list.remove("세번째");
// }
while(list.indexOf("세번째")!=-1){ //-->첫번째로 등장하는 인덱스 위치 찾아줌.
list.remove("세번째"); //없을땐 -1 반환
}
Object[] obj=list.toArray();
System.out.println("------------------------");
for(int i=0; i<obj.length; i++)
System.out.println(obj[i]); //끄집어내면 모두 object 이므로 필요시 캐스팅하여 써야한다.
}
}
LinkedList list2=new LinkedList();
list2.add("첫번째");
List list=new ArrayList(list2); //원래는 linked리스트인데 array리스트로 만들 수 있다.
package com.bit.day10;
import java.util.ArrayList;
public class Ex04 {
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add("item1");
list.add("item2");
ArrayList list2=new ArrayList(list); //깊은복사
list.add(12121); //추가가 안된다. 복사는 위 시점에서 진행됐으므로
for(int i=0; i<list2.size(); i++){
System.out.println(list2.get(i));
}
}
}
package com.bit.day10;
import java.util.ArrayList;
import java.util.List;
public class Ex04 {
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add("item1");
list.add("item2");
ArrayList list2=new ArrayList(list); //복사
list2.add("item3");
list2.add("item4");
List list3=list2.subList(1, 3); //리턴타입은 List타입.
for(int i=0; i<list3.size(); i++){
System.out.println(list3.get(i));
}
}
}
Array리스트는 어느정도 공간을 가지도록 생성되고, 다 차면 늘린다.(stringbuffer처럼)
trimTosize를 이용하여 잘라낼 수 있다
또한 객체를 생성할 때, 생성자에게 initalCapacity의 공간을 만들라고 명령을 줄 수 있다.
package com.bit.day10;
import java.util.ArrayList;
public class Ex04 {
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add("item1");
list.add("item2");
ArrayList list2=new ArrayList(10); //공간 정해서 만들었다.
list2.add("1234");
list2.trimToSize(); //공간을 자른다.
list2.add("4321");
for(int i=0; i<list2.size(); i++){
System.out.println(list2.get(i));
}
}
}