List< E >
ArrayList
List<타입 파라미터> 객체명 = new ArrayList<타입 파라미터>(초기 저장용량);
List<Integer> box1 = new ArrayList<Integer>(30);
List<Integer> box2 = new ArrayList<Integer>(); // 초기 저장용량 미선언시, 10으로 설정
List<Integer> box3 = new ArrayList(); // 다음과 같이 생략가능
List<String> list = new ArrayList<String>();
list.add("element1") // 리스트에 (맨 뒤에) 항목 추가
list.add(0, "element0") // 특정 인덱스에 항목 추가
int size = list.size(); // 저장된 총 객체 수 얻기
String firstElement = list.get(0); // 0번 인덱스의 객체 얻기
list.remove(0); // 0번 인덱스 객체 삭제
LinkedList
List 비교
ArrayList | LinkedList | |
---|---|---|
객체 추가시 | 자동으로 인덱스를 부여 | 객체 자신, 자신과 연결된 요소의 주솟값 저장 |
연속성 | 데이터가 연속적으로 존재 | 데이터가 불연속적으로 존재, 서로 연결되어 있음 |
변경시, | 저장된 다른 데이터들을 복사해서 이동 | 앞뒤 요소의 연결된 주솟값, 객체 추가-제거만 변경 |
탐색시, | 인덱스를 이용해서 탐색함 | 첫 요소부터 다음 주솟값으로 찾아다니면서 탐색함 |
장점 | 탐색에 용이 (일반적인 List에 사용) | 변경에 용이 (자주 변경되는 List에 사용) |
Set< E >
HashSet
public class SetTest {
public static void main(String[] args) {
HashSet<String> languages = new HashSet<String>();
languages.add("Java");
languages.add("Python");
languages.add("Javascript");
languages.add("Java");
Iterator it = languages.iterator();
while(it.hasNext()) {
System.out.println(it.next()); // 3개만 출력됨 (중복 허용 X)
}
}
}
TreeSet
Java에서 Iterator보다는 enhanced for문을 이용하는 것을 권장 (편의성)
Iterator
Iterator 사용목적
Iterator의 기능 및 특징
Iterator Interface Method
메서드 | 설명 |
---|---|
hasNext() | 가져올 객체가 있으면 true를 리턴하고, 없으면 false를 리턴한다 |
next() | 컬렉션에서 하나의 객체를 가져온다 |
remove() | 컬렉션에서 객체를 제거한다 |
예시
// List<String> list;
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
String str = iterator.next(); // 객체를 순서대로 가져옴
if(str.equals("str")){
iterator.remove(); //가져온 객체 제거
}
}
class NumberString implements Comparable<NumberString> {
int number;
String stringNumber;
NumberString(int number){
this.number = number;
this.stringNumber = Integer.toString(number);
}
@Override // compareTo를 구현하여 정렬을 하게 함
public int compareTo(NumberString numberString){
if(number > numberString.number) {
return 1;
} else if(number < numberString.number){
return -1;
} else {
return 0;
}
}
}
public class ComparableExample {
public static void main(String[] args) {
Set<NumberString> numSet = new TreeSet<>();
NumberString num1 = new NumberString(1);
NumberString num2 = new NumberString(10);
NumberString num3 = new NumberString(100);
NumberString num4 = new NumberString(500);
numSet.add(num4);
numSet.add(num3);
numSet.add(num2);
numSet.add(num1);
for(NumberString num : numSet){
System.out.print(num.stringNumber + " "); // 1 10 100 500
}
}
}
public class ComparatorTest {
public static void main(String[] args) {
NumberAndString one = new NumberAndString(1);
NumberAndString ten = new NumberAndString(10);
NumberAndString six = new NumberAndString(6);
ArrayList<NumberAndString> numbers = new ArrayList<>();
numbers.add(six);
numbers.add(ten);
numbers.add(one);
for (NumberAndString number : numbers){
System.out.print(number.numString); // 6 10 1
}
Collections.sort(numbers, new SortById());
for (NumberAndString number : numbers){
System.out.print(number.numString); // 10 6 1
}
}
}
class NumberAndString {
int id, numInt;
String numString;
NumberAndString(int num){
this.id = num;
this.numInt = num;
this.numString = Integer.toString(num);
}
}
class SortById implements Comparator<NumberAndString>{
public int compare(NumberAndString number1, NumberAndString number2){
return number2.id - number1.id; // 크기 역순 배치
}
}