ArrayList Class
- java의 standard library class (java.util.ArrayList 에 있음) (lang이 기본으로 되는거고, 저거는 임포트 해줘야됨 ^^)
= 동적 데이터 구조 -> 아이템이 리스트에서 추가되거나 삭제될 수 있고, 이때 배열 길이가 늘어나거나 줄어든다!
-> 실행동안 배열의 길이를 변경할 수 있다는 점 을 제외하면 일반 배열과 동일한 용도로 사용됨!
( 일반적인 array : 초기 크기가 고정되어있으므로 정적 데이터 구조)
• 구현 ; array를 private 멤버로 만들어 구현. 꽉차면 새로운 배열에 데이터를 옮기는 방식!
- base type은 class type! (그래서 기본 자료형(primitive type)으로 배열 만들면 Integer 이런식으로 boxing 해줘야함^^)
• 사용할 때
import java.util.ArrayList;
ArrayList<BaseType> aList = new ArrayList<BaseType>() ; // () 있는 것만 주의하자!!
크기 지정은 저기 가로에다가 함
ArrayList<BaseType> aList = new ArrayList<BaseType>(20) ; //이런식으로!
• operations
- 인덱스 접근 -> [ ] 표기법 제공 x -> get
aList.get(index) -> 해당 인덱스의 값을 반환
- 값 넣을때 -> add(obj), set(i, obj)함수
맨첨에 리스트에 값 추가하려면 aList.add("Hi"); 이렇게 add함 그럼 뒤에 추가됨
인덱스 설정도 가능
aList(3,"Hi"!);
** add는 새로 값 추가하는 거, set은 존재하는 값 수정하는거! 초기화는 안됨
-> aList.set(3,"dd"); 하면 인덱스3에 있는 값이 수정됨!! replace
- aList.size() -> 저장되어있는 element 수 반환!!
- 삭제 : aList.remove(index) -> 인덱스 친구 삭제 가능
* for each loop ? 당연히 사용 가능~~
for(Integer a:aList){
a어쩌구
}
• 왜 항상 ArrayList 를 사용하지는 않는겅미?
- [] 표기법 제공 x
- 그냥 array보다 less effecient
- base type이 무조건 class 이어야함 (근데 자동 박싱 언박싱 해줘서 글케 큰문제는 아니에영)
https://codechacha.com/ko/java-collections-arraylist-remove/
Java - ArrayList.remove() 사용 방법 및 예제
ArrayList의 remove()는 리스트의 객체를 삭제하는데 사용되는 메소드입니다. ArrayList.remove(int index)는 인자로 전달된 인덱스의 아이템을 리스트에서 삭제합니다. ArrayList.remove(Object o)는 인자와 동일한
codechacha.com
마지막 요소 지우기는
.remove(aList.size()-1);
Generics
: 일반적인 코드를 작성하고, 이 코드를 다양한 타입의 객체에 재사용하는 기법~ ~
-> 클래스에서 사용할 타입을 클래스 외부에서 설정함 . type parameter 가 존재해서 !
( type -> 무조건 class type ~~ primitive 노노)
1. Class
: type parameter가 있는 class 를 정의합니당
public class className<T> { ~~ }
이렇게 선언부에 <T> 적어줌. 여러개 할꺼면 <T, U> 이런식으로
클래스 내부에서 이 타입을 사용하면 됨 ! 필요한 곳에
ex)
private T data;
public void setData(T data){
this.data=data;
}
public T getData(){
return data;
}
그리고 이거 사용할 때
className<Integer> a = new className<Integer> () ; (constructor ~ )
이런식으로 해줍니다앙! 걍 이름옆에 <타입>을 꼭 붙여준다
2. Method
- 위에서처럼 class에 generic썼으면 거기 자식 메소드에 T갖다 쓸 수 있음
- 그냥 일반 메소드에도 가능 ! -> 함수 호출할 때마다 type을 넣어주는 방식 (당연히 해당 mehod에만 적용. not class)
선언시
public //여기적어줌// void name(~){ ~ }
ex)
public static <T> T fname(T a){
~ return a;
}
호출시
<type>fname()
<String>fname(parameter) 이런식으로
obj.<Integer>fname()
** Type parameter에 bound를 걸 수 있다**
• <T extends otherClass> 해서 해당 클래스를 상속한 클래스만 타입으로 올 수 있도록 함.
여러개면 <T extends A&B, U extends C > 이런식으로
(&=둘중하나인듯) 인터페이스도 extends 로 씀!!
ex) <T extends Comparable> 으로 적어서 Comparable을 상속한 클래스들만 올 수 있도록 함!
** 이 generic형태 인터페이스도 가능!
'2-1 > 객체지향 - java' 카테고리의 다른 글
디자인패턴 2 - Observer & Decorator (0) | 2022.06.18 |
---|---|
Design pattern - Singleton (0) | 2022.06.13 |
Interfaces and Inner Classes (0) | 2022.06.02 |
19- Threads (0) | 2022.05.31 |
Chap 9. Exception handling (0) | 2022.05.30 |