결론 : 데이터 개수가 변하지 않는 경우라면 ArrayList, 데이터 개수 변경이 잦다면 LinkedList를 사용하자.
변경이 잦아도 순차적(뒤부터 추가/삭제 한다면)이라면 ArrayList도 고려할 수 있다.
일반적으로 순차적으로 데이터를 추가 삭제하는 Stack은 ArrayList가 더 적합하고
첫 번째 저장된 데이터를 삭제하는 Queue는 LinkedList가 더 적합하다.
public class Main {
public static void main(String[] args) {
Stack st = new Stack();
Queue q = new LinkedList();
}
}
java에서 Stack은 구현된 클래스를 제공하고 Queue는 인터페이스만 정의해 놓았다.
LinkedList는 Queue인터페이스를 구현한 클래스이기도 하다.
public class Main {
public static void main(String[] args) {
int[] test = new int[10];
int count = 0;
Arrays.fill(test, 5);
System.out.println(Arrays.toString(test));
Arrays.setAll(test, (v) -> {
//count++;
// Variable used in lambda expression should be final or effectively final
return (int) (Math.random() * 5);
});
System.out.println(Arrays.toString(test));
}
}
결과
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
[0, 4, 2, 3, 1, 4, 0, 1, 2, 0]
setAll()은 배열을 채우는데 사용할 함수형 인터페이스를 매개변수로 받는다.
람다식에서 사용하는 변수는 final이여야 한다.
public class Main {
public static void main(String[] args) {
int[] t1 = new int[10];
int[] t2 = new int[10];
int[][] test = new int[10][10];
int[][] test2 = new int[10][10];
int[][][] test3 = new int[10][10][10];
int[][][] test4 = new int[10][10][10];
System.out.println(t1.equals(t2));
System.out.println(Arrays.equals(test, test2));
System.out.println(Arrays.deepEquals(test, test2));
System.out.println(Arrays.deepEquals(test3, test4));
}
}
결과
false
false
true
true
Array instance.equals() : 비교연산자(==)랑 동일
Arrays.equals() : 값 비교
Arrays.deepEquals() : 다차원 값 비교
public class Main {
public static void main(String[] args) {
Character[] t = {'a','b','c','d','e'};
Arrays.sort(t);
System.out.println(Arrays.toString(t));
Arrays.sort(t, new Descending());
System.out.println(Arrays.toString(t));
}
}
class Descending implements Comparator{
public int compare(Object o1, Object o2){
if( o1 instanceof Comparable && o2 instanceof Comparable){
Comparable c1 = (Comparable) o1;
Comparable c2 = (Comparable) o2;
return c1.compareTo(c2) * -1;
}
return -1;
}
}
결과
[a, b, c, d, e]
[e, d, c, b, a]
Comparable : 기본 정렬기준을 구현하는데 사용
Comparator : 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용
Comparable 소스
public interface Comparable<T> {
public int compareTo(T o);
}
Arrays.sort(arr)로 동작하는 것은 arr type(ex_ Integer)의 compareTo로 정렬한다.
Iterator, ListIterator, Enumeration은 모두 컬렉션 요소 접근에 사용되는 인터페이스이다.
Collection interface는 iterator()를 정의하고 있다.
public class Main {
public static void main(String[] args) {
List<Integer> t = Arrays.asList(new Integer[2]);
Iterator it = t.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println("===========");
for(int i=0; i<t.size(); i++){
Integer val = t.get(i);
System.out.println(val);
}
}
}
결과
null
null
===========
null
null
위와 같이 사용한다.
Map m = new HashMap();
Set t = m.entrySet();
Iterator it = t.iterator();
map의 경우 entrySet(), keySet()을 이용