이 목록에 지정된 요소가 포함되어 있으면 true를 반환합니다.
ArrayList 정렬은 Collections 클래스의 sort를 이용 해야 한다.
Collections.sort(list);
배열을 리스트에 넣는 방법은 방법1처럼 반복문을 사용하여 일일이 넣어줄 수 있지만 방법2를 사용하면 아주 간단히 리스트에 삽입 할 수 있다.
new ArrayList<>( Arrays.asList(arr) );
String [] arr = {"hello", "world"};
//방법1.
ArrayList<String> list = new ArrayList<>();
for(int i=0;i<arr.length;i++)
list.add(arr[i]);
//방법2.
ArrayList<String> list = new ArrayList<>(Arrays.asList(arr));
배열을 통해 리스트를 만드는 것
왼쪽곡선처럼 일일이 찾아야 하는게 Linked List
호수를 알고 바로 찾는게 ArrayList
제일 뒤에 있는 element 값이 먼저 뒤로 밀리고 차례대로 하나하나씩 밀리면 원하는 위치에 빈공간이 생긴다.
이 빈공간에 새로운 element가 추가.
데이터를 삭제하면 빈공간이 생김.
차례대로 빈공간 뒤에서부터 일일이 앞에 빈공간을 채워준다.
시간이 많이 소요
index값을 알아서 데이터를 쉽게 가져옴(get)
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
public class Main {
public static void main(String[]args) {
ArrayList<Integer> numbers = new ArrayList<>();
//❓ insert
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40); //차례대로 insert
System.out.println("add(value)");
System.out.println(numbers);
numbers.add(1, 50);
System.out.println("add(index,value)");
System.out.println(numbers);
//❓ remove
numbers.remove(2);
System.out.println("remove(index)");
System.out.println(numbers);
//❓ get 가져오기
System.out.println("get(index)");
System.out.println(numbers.get(2));
//❓ size
System.out.println("size()");
System.out.println(numbers.size());
//❓ Iteration (반복)
//반복을 이용해 원하는 값이 위치한 element를 delete하기
//Iterator it = numbers.iterator();
Iterator <Integer>it = numbers.iterator();
System.out.println("while");
while(it.hasNext()) { //hasNext() 는 boolean//numbers array가 다음에 가져올수 있는 element가 있는지
int value1 = it.next(); //-> element 가 있으면 value에 next값 넣기
//Iterator의 메소드들은 데이터타입이 object이기 때문에 casting이 필요함
//int value = (Integer)it.next();-> 제네릭사용
if(value1 ==30) {
it.remove();
}
System.out.println(value1); //int value =it.next()확인하기
//System.out.println(numbers);
}
System.out.println(numbers);
//❓ 반복2
System.out.println("for each (:)");
for(int value2 : numbers) { // : 는 numbers Array 의 element가 int value2에 담겨서 반복
System.out.println(value2);
}
System.out.println("normal for value print");
for(int i=0;i<numbers.size();i++) {
System.out.println(numbers.get(i));
}
}
}
class ArrayList{
private int size = 0;//몇개의 데이터가 리스트에 들어있는지
private Object[] elementData = new Object[100];
//❓ 제일끝에추가
public boolean addLast(Object element) {
elementData[size] = element; // size=0 인 상태에서 인자 값element가 elementData 0번째에 추가
size++;
return true;
}
//❓ 제일 앞에 추가
public boolean addFirst(Object element) {
return add(0,element); //boolean인데 왜 리턴 이렇게하지?!
}
//❓ 중간에 낑겨넣기
public boolean add(int index, Object element) { //뒤에서부터 옮겨줘야하기때문에 카운트가 줄어드는 반복
for(int i= size-1; i>=index; i--) {
elementData[i+1] = elementData[i];
}
elementData[index] = element;
size++; // 배열의 사이즈를 증가시켜줘야한다.
return true;
}
//❓ 배열확인하기위해 print
public String toString() {
String str = "[";
for(int i=0;i<size;i++) {
str += elementData[i];
if(i < size-1) { //마지막에 콤마 없애기위해
str +=",";
}
}
return str + "]";
//return "test";
}
//❓ 중간 element를 삭제하면 비운부분 채워야함
public Object remove(int index) {
Object removed = elementData[index];
for(int i=index+1;i<=size-1;i++) {
elementData[i-1] = elementData[i];
}
size--;
//남아있는 제일뒤에있는 데이터삭제
elementData[size] = null;
//삭제하려고하는 element의 이전값을리턴해야함->삭제하기전에 object값을 저장하여리턴
return removed;
}
}
public class Implement {
public static void main(String[] args) {
ArrayList numbers = new ArrayList();
//❓ 제일끝에 데이터 추가하기
numbers.addLast(10);
numbers.addLast(20);
numbers.addLast(30);
numbers.addLast(40);
//❓ 낑겨넣기. arraylist는 하나하나 뒤로 무른다음에 넣어줘야해서 효울x
numbers.add(1,15);
System.out.println("add : " + numbers);
numbers.addFirst(5);
System.out.println("addFirst : "+numbers);
System.out.println("value of before remove :"+numbers.remove(1));
System.out.println("after remove : " + numbers);
}
}