ArrayList

J·2021년 3월 27일
0

자주 사용하는 함수 (계속 추가++)

1. arraylist.contains(Object o)

이 목록에 지정된 요소가 포함되어 있으면 true를 반환합니다.


2. Collections.sort(arraylist)

ArrayList 정렬은 Collections 클래스의 sort를 이용 해야 한다.

Collections.sort(list);


3. 배열을 리스트에 넣기

배열을 리스트에 넣는 방법은 방법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));

ArrayList란

배열을 통해 리스트를 만드는 것

왼쪽곡선처럼 일일이 찾아야 하는게 Linked List

호수를 알고 바로 찾는게 ArrayList

Insert

제일 뒤에 있는 element 값이 먼저 뒤로 밀리고 차례대로 하나하나씩 밀리면 원하는 위치에 빈공간이 생긴다.

이 빈공간에 새로운 element가 추가.

Delete

데이터를 삭제하면 빈공간이 생김.

차례대로 빈공간 뒤에서부터 일일이 앞에 빈공간을 채워준다.

단점

시간이 많이 소요

장점

index값을 알아서 데이터를 쉽게 가져옴(get)


API 사용법

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);
	}

}

0개의 댓글