728x90
반응형
컬렉션(collection)
- 요소(element) 객체들의 저장소
- 고정 크기의 배열을 다루는 어려움 해소
- 다양한 객체들의 삽입,삭제,검색 등의 관리 용이
컬렉션은 제네릭 기법으로 구현된다.
컬렉션의 요소는 객체만 가능하다
(int,char,double과 같은 기본 타입이 아니라 Integer,String같은 객체를 사용하여야 함)
오늘 알아볼 것들
- Vector<E>
- ArrayList<E>
- LinkedList<E>
- Iterator
- HashMap<K,V>
- Collections
- 제네릭 클래스 만들기
Vector<E>
java.util.Vector
Vector<E> 클래스의 주요 메소드
- boolean add(E element) : 맨 뒤에 element 추가
- void add(int index, E element): index 위치에 element 삽입
- int capacity() : 벡터의 현재 용량 리턴
- boolean addAll(Collection<? extends E> c) : 컬렉션 C의 모든 요소를 벡터의 맨 뒤에 추가
- void clear() : 벡터의 모든 요소 삭제
- E get(int index) : index위치의 요소 리턴
- boolean isEmpty() : 벡터가 비어있으면 true 리턴
- E remove(int index): index위치의 요소 삭제
- boolean remove(Object o) : 객체 o와 같은 첫 번째 요소를 벡터에서 삭제
- int size(): 벡터가 포함하는 요소의 개수 리턴
이 외에도 많은 메소드가 있으니 벡터.자동완성을 이용해서 필요한 메소드를 찾아 써 보자.
Vector<Integer> v= new Vector<>();
Vector<myClass> v2 = new Vector<>();
v.add(1);
v.add(2);
v.add(2,3);
v2.add(new myClass());
ArrayList<E>
대부분의 기능이 Vector와 동일.
하지만 벡터와 달리 스레드 동기화 기능이 없음.
LinkedList<E>
Vector, ArrayList와 매우 유사하게 작동.
리스트의 중간에서 삽입과 삭제가 자주 일어나면 효율적일듯 하다.
Iterator
Vector<E>, ArrayList<E>, LinkedList<E>가 상속받는 인터페이스이다.
컬렉션의 순차 검색을 위해 사용할 수 있다.
- boolean hasNext() : 방문할 요소가 남아 있으면 true 리턴
- E next(): 다음 요소 리턴
- void remove(): 마지막으로 리턴된 요소 제거
iterator 이용하여 순차검색하는 예시.
Vector<Integer> v = new Vector<>();
Iterator<Integer> it= v.iterator();
while(it.hasNext())
{
int n=it.next();
...
}
HashMap<K,V>
key,value가 한 쌍으로 구성되는 컬렉션이다.
키를 이용해서 값을 검색할 수 있다.
HashMap<K,V>의 주요 메소드
- void clear() : 해시맵의 모든 요소 삭제
- V get<Object key): key에 일치하는 값 리턴. 키가 존재하지 않으면 null 리턴
- V put(K key, V value): key와 value쌍을 해시맵에 저장
- V remove(Object key): key를 찾아 키와 값 모두 삭제
- int size(); 해시맵에 포함된 요소의 개수 리턴
- Set<K> keySet() :해시맵의 모든 키를 담은 Set<K> 컬렉션 리턴
HashMap<String,String> dic = new HashMap<>();
dic.put("hello",안녕);
dic.put("potato",감자);
Scanner sc = new Scanner(System.in);
while(true)
{
System.out.print("검색할 단어를 입력하세요");
String word=sc.next();
if(word.equals("quit")
break;
String hangeul = dic.get(word);
if(hangeul==null)
System.out.println("존재하지 않는 단어입니다");
else
System.out.println(hangeul);
}
Collections 클래스 활용
정렬 기능: Collections.sort(myList), Collections.reverse(myList)
요소들의 최대,최솟값을 찾기: max(), min()
특정 값 검색하기: Collections.binarySearch(myList,"아바타")
등
제네릭 만들기
클래스나 인터페이스 선언부에 일반화된 타입을 추가할 수 있다.
public class MyClass<T>{
T value;
void set(T a);
{
value=a;
}
T get()
{
return value;
}
}
제네릭 메소드도 선언할 수 있다.
class GenericMethodEx{
static <T> void toStack(T[] a, GStack<T> gs)
{
for(int i=0;i<a.length;i++){
gs.push(a[i]);
}
}
}
(여기서 GStack은 내가 만든 제네릭 클래스임)
728x90
반응형
'2022-2 > 자바' 카테고리의 다른 글
[자바] 인터페이스 (0) | 2022.12.18 |
---|---|
[자바] 스레드와 멀티태스킹 (0) | 2022.12.18 |
[자바] 네트워크 (0) | 2022.12.17 |
[자바] ArrayList<클래스> 형의 정렬방법 (0) | 2022.12.12 |
[자바] 멀티스레드, synchronized (0) | 2022.12.01 |
댓글