Iterator<E> iterator();
첫번째원소부터 마지막까지 순서대로 리스트의 요소들을 반환한다
사용메서드 예) hasNext()
ListIterator
Iterator인터페이스를 상속받아 여러기능을 추가한 인터페이스로
Iterator인터페이스는 컬렉션 요소에 접근할때 한방향으로만 이동가능하지만
JDK1.2부터 제공된 ListIterator인터페이스는 컬렉션요소의 대체,
추가 그리고 인덱스 검색등을 위한 작업에서 양방향으로 이동하는것을 지원
단, ListIterator 인터페이스는 List 인터페이스를 구현한 List 컬렉션 클래스에서만 listIterator() 메소드를 통해 사용할 수 있다.
사용메서드 예) hasNext(), hasPrevious()
--------------------------------------------------------------------------------------------------
<T> T[] toArray(T[] a);
The followi9ng code can be used to dump the list into a newly allocated array of String:
String[] y = x.toArray(new String[0]);
1. List를 toArray 메서드에 파라메터로 넘어가는 배열 객체의 size만큼의 배열로 전환한다.
2. 단, 해당 List size가 인자로 넘어가는 배열 객체의 size보다 클때, 해당 List의 size로 배열이 만들어진다.
3. 반대로 해당 List size가 인자로 넘어가는 배열객체의 size보다 작을때는, 인자로 넘어가는 배열객체의 size로 배열이 만들어진다.
때문에 string[0]으로하면 제일 작은 값이니 list의 크기에 맞춰서 적용된다.
List<String> stringList = new ArrayList<String>();
stringList.add("A");
stringList.add("B");
stringList.add("C");
String[] stringArray = stringList.toArray(new String[5]);
System.out.println("array size : " + stringArray.length);
출력결과->array size : 5
Object[] toArray();
반환된 배열은 이 list에서 해당 배열에 대한 참조를 유지 관리하지 않는다는 점에서 "안전"합니다. (즉, 이 list이 배열로 뒷받침되더라도 이 메서드는 새 배열을 할당해야 합니다
-> 호출한사람은 자유럽게 반환된 어레이를 수정할 수 있다.
둘다 배열로 반환하지만 차이점이 뭘까?
첫번째는 반환값이 T[], 두번째는 반환값이 Object[]이다.
It's to provide a type for the return and prevent any compile-time ambiguity.
the signiture for that method call is: <T> T[] toArray(T[] a)
wheras the empty parameter one is Object[] toArray()
------------------------------------------------------
equals
순서와 값이 같으면 true값
boolean add(E e);
리스트는 어떤게 리스트에 추가될지 제한을 둘수 있다. 예를 들면 null값들을 넣는걸 거부한다던가 혹은 특정타입의 elements들이 추가되는걸 제한할수 있다. 리스트 클래스에서는 어떤타입을 추가되는걸막을지 문서에 제한을 명시해야함
boolean addAll(Collection<? extends E> c);
하나하나 요소가 아니라 컬렉션을 뒤에다가 이어붙임 , 성공적으로 추가하면 true붙임
boolean addAll(int index, Collection<? extends E> c);
특정장소에서부터 컬렉션을 이어붙임
default void replaceAll(UnaryOperator<E> operator) {
Objects.requireNonNull(operator);
final ListIterator<E> li = this.listIterator();
while (li.hasNext()) {
li.set(operator.apply(li.next()));
}
}
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}
void clear();
list요소제거
int hashcode();
리스트 e1.equals(e2)이면 e1.hashcode()==e2.hashcode();
이다. -> list의 값에 따라 정해지는방식인것을 확인할 수 있따.
int hashCode = 1;
for (E e : list)
hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
list of
자바 9버전부터 지원하는 메서드
반환값은 특정 elements를 가지고있는 리스트를 반환한다.
반환값은 수정할수없는 리스트를 반환한다.
수정불가능한 리스트는 값을 삽입,null허용,변경 삭제등을 하지 못한다.(Unmodifiable lists)
사용하는이유는멀까?
They are unmodifiable. Elements cannot be added, removed, or replaced. Calling any mutator method on the List will always cause UnsupportedOperationException to be thrown. However, if the contained elements are themselves mutable, this may cause the List's contents to appear to change.
Spliterator
Spliterator는 Java8부터 사용할 수 있습니다. Map 구현과는 별도로 컬렉션 및 스트림 API를 반복하는 데 사용할 수 있습니다. Java Spliterator를 사용하여 목록을 분할 한 다음 반복하여 각 요소를 검색 할 수 있습니다. Iterator와 유사한 순차 반복을 수행 할 수도 있습니다. 조합 된 작업을 수행하는 단일 방법이 있습니다. hasNext() 및 next() Iterator 인터페이스의 메서드.
Java Spliterator의 주요 용도는 입력을 다른 부분으로 분할 한 다음 각 부분을 병렬로 개별적으로 처리하는 것입니다. 병렬 프로그래밍을 통해 많은 양의 데이터를 처리하는 것이 유용합니다.
------------------------------------------------------
package Interface_form;
/**
*
* 자바 List Interface입니다. <br>
* List는 ArrayList, SinglyLinkedList, DoublyLinked에 의해 각각 구현됩니다.
*
* @author st_lab
* @param <E> the type of elements in this list
*
* @version 1.0
*
*/
public interface List<E> {
/**
* 리스트에 요소를 추가합니다.
*
* @param value 리스트에 추가할 요소
* @return 리스트에서 중복을 허용하지 않을 경우에 리스트에 이미 중복되는
* 요소가 있을 경우 {@code false}를 반환하고, 중복되는 원소가
* 없을경우 {@code true}를 반환
*/
boolean add(E value);
/**
* 리스트에 요소를 특정 위치에 추가합니다.
* 특정 위치 및 이후의 요소들은 한 칸씩 뒤로 밀립니다.
*
* @param index 리스트에 요소를 추가할 특정 위치 변수
* @param value 리스트에 추가할 요소
*/
void add(int index, E value);
/**
* 리스트의 index 위치에 있는 요소를 삭제합니다.
*
* @param index 리스트에서 삭제 할 위치 변수
* @return 삭제된 요소를 반환
*/
E remove(int index);
/**
* 리스트에서 특정 요소를 삭제합니다. 동일한 요소가
* 여러 개일 경우 가장 처음 발견한 요소만 삭제됩니다.
*
* @param value 리스트에서 삭제할 요소
* @return 리스트에 삭제할 요소가 없거나 삭제에 실패할
* 경우 {@code false}를 반환하고 삭제에 성공할 경우 {@code true}를 반환
*/
boolean remove(Object value);
/**
* 리스트에 있는 특정 위치의 요소를 반환합니다.
*
* @param index 리스트에 접근할 위치 변수
* @return 리스트의 index 위치에 있는 요소 반환
*/
E get(int index);
/**
* 리스트에서 특정 위치에 있는 요소를 새 요소로 대체합니다.
*
* @param index 리스트에 접근할 위치 변수
* @param value 새로 대체할 요소 변수
*/
void set(int index, E value);
/**
* 리스트에 특정 요소가 리스트에 있는지 여부를 확인합니다.
*
* @param value 리스트에서 찾을 특정 요소 변수
* @return 리스트에 특정 요소가 존재할 경우 {@code true}, 존재하지 않을 경우 {@code false}를 반환
*/
boolean contains(Object value);
/**
* 리스트에 특정 요소가 몇 번째 위치에 있는지를 반환합니다.
*
* @param value 리스트에서 위치를 찾을 요소 변수
* @return 리스트에서 처음으로 요소와 일치하는 위치를 반환.
* 만약 일치하는 요소가 없을경우 -1 을 반환
*/
int indexOf(Object value);
/**
* 리스트에 있는 요소의 개수를 반환합니다.
*
* @return 리스트에 있는 요소 개수를 반환
*/
int size();
/**
* 리스트에 요소가 비어있는지를 반환합니다.
* @return 리스트에 요소가 없을경우 {@code true}, 요소가 있을경우 {@code false}를 반환
*/
boolean isEmpty();
/**
* 리스트에 있는 요소를 모두 삭제합니다.
*/
public void clear();
}