ArrayList
- 크기를 선언하지 않아도 됨
- java.util.ArrayList를 import 해야 함
- add( )로 데이터를 추가함
- size( )로 크기를 알 수 있음
- get( )으로 데이터에 접근할 수 있음
ArrayList al = new ArrayList();
al.add("one");
al.add("two");
al.add("three");
for (int i = 0; i < al.size(); i++) {
String value = al.get(i);
System.out.println(value); // 에러
// add()는 어떠한 타입도 수용해야 하기 때문에 매개변수의 데이터 타입은 Object임
// 따라서, 추가된 데이터는 Object 타입인데, value는 String 타입이므로 에러가 발생함
// String value = (String)al.get(i)로 형변환을 하거나, 처음에 제네릭을 통해 String으로 지정해주면 됨
}
Collections Framework
: 컬렉션 + 맵
- 데이터의 중복 가능 여부에 따라 list와 set 중에 선택하면 됨
- list는 순서가 보장되고, 중복이 허용됨
- set은 순서가 보장되지 않고, 중복을 허용하지 않음
- map은 (key, value)의 저장 형식을 가짐
- contatinsAll( ) : 부분집합
- addAll( ) : 합집합
- retainAll( ) : 교집합
- removeAll( ) : 차집합
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
public class SetDemo {
public static void main(String[] args) {
HashSet<Integer> A = new HashSet<Integer>();
A.add(1);
A.add(2);
A.add(3);
HashSet<Integer> B = new HashSet<Integer>();
B.add(3);
B.add(4);
B.add(5);
HashSet<Integer> C = new HashSet<Integer>();
C.add(1);
C.add(2);
System.out.println(A.containsAll(B)); // false
System.out.println(A.containsAll(C)); // true
}
Iterator
: 반복자
import java.util.HashSet;
import java.tuil.Iterator;
public class SetDemo {
public static void main(String[] args) {
HashSet<Integer> A = new HashSet<Integer>();
A.add(1);
A.add(2);
A.add(3);
Iterator hi = A.iterator();
// A를 복제한 hi 인스턴스가 생김
while (hi.hasNext()) {
System.out.println(hi.next());
// 값이 출력되고, 출력된 값은 사라짐
}
}
- Collection의 메소드이기 때문에, 리스트에서도 사용할 수 있음
import java.util.ArrayList;
import java.tuil.Iterator;
public class SetDemo {
public static void main(String[] args) {
ArrayList<Integer> A = new ArrayList<Integer>();
// ArrayList에서도 사용할 수 있음
A.add(1);
A.add(2);
A.add(3);
Iterator hi = A.iterator();
while (hi.hasNext()) {
System.out.println(hi.next());
}
}
import java.util.Collection;
import java.util.ArrayList;
import java.tuil.Iterator;
public class SetDemo {
public static void main(String[] args) {
Collection<Integer> A = new ArrayList<Integer>();
// Collection으로도 가능함
// Collection<Integer> A = new HashSet<Integer>(); 도 가능함
A.add(1);
A.add(2);
A.add(3);
Iterator hi = A.iterator();
while (hi.hasNext()) {
System.out.println(hi.next());
}
}
- map의 key는 중복이 안되지만, value는 중복이 가능함
- 이미 있는 key에 value를 대입하면, key는 그대로이고 value만 갱신됨
- put( , ) : map에 데이터를 추가
public static void main(String[] args) {
HashMap<String, Integer> a = new HashMap<String, Integer>();
a.put("one", 1);
a.put("two", 2);
// put()은 map에서만 사용할 수 있음
}
< Map의 출력 방법 >
① getKey( ), getValue( )
- getKey( ) : map에서 key를 출력함
- getValue( ) : map에서 value를 출력함
- map은 iteration 기능이 없기 때문에, set으로 만든 후 출력
static void iteratorUsingForEach(HashMap map) {
Set<Map.Entry<String, Integer>> entries = map.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
(System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
② 반복자 iterator
static void iteratorUsingIterator(HashMap map) {
Set<Map.Entry<String, Integer>> entries = map.entrySet();
Iterator<Map.Entry<String, Integer>>i = entries.iterator();
while (i hasNext()) {
Map.Entry<String, Integer> entry = i.next();
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
< Collections의 사용법과 정렬 >
- ArrayList에 추가한 순서대로 출력됨
- Comparable 인터페이스로 정렬함
- Collections 클래스는 데이터와 관련된 작업을 처리할 수 있도록 해주는 클래스
- Collections 클래스 안의 메소드들은 전부 static이기 때문에 인스턴스를 만들지 않아도 됨
import java.util.*;
class Computer implements Comparable {
int serial;
String owner;
Computer(int serial, String owner) {
this.serial = serial;
this.owner = owner;
}
public int compareTo(Object o) {
return this.serial - ((Computer)o).serial;
// a.compareTo(b)는 (a.serial - b.serial)을 반환
// 반환 타입이 int이기 때문에 양수, 0, 음수가 가능함
}
// Comparable 인터페이스는 compareTo 메소드를 구현하도록 강제함
public String toString() {
return serial + " " + owner;
}
}
public class CollectionsDemo {
public static void main(String[] args) {
List<Computer> computers = new ArrayList<Computer>();
// List 타입을 정렬하려면 List의 각각의 객체들이 Comparable 인터페이스를 구현하고 있어야 함
computers.add(new Computer(500, "egoing"));
computers.add(new Computer(200, "leezche"));
computers.add(new Computer(3233, "graphittie"));
Iterator i = computers.iterator();
System.out.println("before");
while(i.hasNext()) {
System.out.println(i.next());
}
Collections.sort(computers);
// 정렬
System.out.println("\nafter");
i = computers.iterator();
while(i.hasNext()) {
System.out.println(i.next());
}
}
}