-
ArrayList 구현 (add, addfirst, addlast, toString, remove, get , Iterator)컴퓨터 공부/JAVA 2020. 3. 22. 11:18
순차적 배열
선언 & 할당 : ArrayList 변수명 = new ArrayList();
Main.java
package list.arraylist.implementation; public class Main{ public static void main(String[] args){ ArrayList numbers = new ArrayList(); //객체 생성 numbers.addLast(10); //데이터 맨 뒤에 삽입 numbers.addLast(20); numbers.addLast(30); numbers.addLast(40); numbers.add(1,15); //인덱스 1번 자리에 15삽입 System.out.println(numbers); //출력 10, 15, 30, 40 numbers.remove(1); //1자리 배열 삭제 10, 30, 40 System.out.println(numbers.get(1)); //인덱스1의 데이터 가져오기 30 numbers.size(); //배열 사이즈 3 System.out.println(numbers.indexOf(20)); //20의 배열 인덱스 출력 -1 for(int i = 0; i< numbers.size();i++){ //모두 출력 (다음 Iterator와 같은 기능) System.out.println(numbers.get(i)); } ArrayList.ListIterator li = numbers.listIterator(); //반복적인 작업을 위한 while (li.hasNext()){ //모두 출력 System.out.println(li.next()); //10 , 30, 40 } while (li.hasPrevious()){ //모두 출력 System.out.println(li.previous()); //40, 30, 10 } while (li.hasNext()){ int number = (int)li.next(); //순회하다가 if(number == 30){ //30나오면 li.add(35); //30 다음에 35 추가 } System.out.println(numbers); //10, 30, 35, 40 } while (li.hasNext()){ int number = (int)li.next(); //순회하다가 if(number == 30){ //30나오면 li.remove(); //30 삭제 } System.out.println(numbers); //10, 35, 40 } }
ArrayList.java
package list.arraylist.implementation; public class ArrayList{ private int size = 0; //배열 안 데이터 수 private Object[] elementData = new Obeject[100]; //Object 타입의 배열을 100개 생성 public boolean addLast(Object element){ //맨 뒤에 배열 추가 elementData[size] = element; //현재 크기를 인덱스로 사용해서 삽입 size++; //크기 증가 return true; } public boolean addfirst (Obeject element){ //맨 앞에 배열 추가 return add(0,element); } public boolean add (int index, Object element){ //배열 중간에 삽입 -> 옆으로 땡겨줌 for (int i =size; i>=index; i--){ //뒤부터 앞으로 element[i+1] = elementData[i]; //한 칸 씩 이동 } elementDate[index]=element; //지정 자리에 삽입 size++; //크기 증가 return true; } public String toString(){ //출력 함수 String str="["; //대활호 for(int i=0;i<size;i++){ str+=elementData[i]; //순회 if(i<size-1){ //마지막엔 , 출력 안 함 str+=","; } } return str+"]";//대활호 } public boolean remove (int index){ //제거 함수 for(int i=index+1;i<size;i++){ //제거할 배열 앞 배열부터 elementData[i-1] =elementData[i]; //앞으로 땡김 } size--; } public removeFirst(){ return remove(0); } public removeLast(){ return(size-1); } public Object get(int index){ //배열의 장점 -> 인덱스로 접근해서 검색이 쉬움, 빠름 return elementDta[index]; } public int size(){ return size; } public int indexOf(Object o){ for(int=0;i<size;i++) { //순회 if(o.equals(elementData[i[)){ return i; } } return -1; } public ListIterator listIterator(){ return new ListIterator(); } class ListIterator{ private int nextIndex = 0; public boolean hasNext(){ return nextIndex < size(); } public Object next(){ return elementData[nextIndex++]; } public boolean hasPrevious(){ return nextIndex > 0; //1먼저 감소하고 가져오므로 1까지만 세기 } public Object previous(){ return elementData[--nextIndex]; //null을 가리키고 있으니까 먼저 1감소 시키고 가져옴 } public void add(Object element){ ArrayList.this.add(nextIndex++,element); //this-> 이 함수랑 이름이 같으니까 위에 있는 add()를 가리킴 } public void remove(){ ArrayList.this.remove(nextIndex-1);//next() 함수에서 인덱스값 가져오고 1증가시키니까 다시 1감소 시켜야 해당 인덱스를 가리키게 됨 nextIndex--; //해당 인덱스가 가리키던 배열 사라졌으니까 그 앞 배열을 가리키게 } } }
'컴퓨터 공부 > JAVA' 카테고리의 다른 글
java enum (0) 2020.03.22 배열 (0) 2020.03.22 for 문, continue (0) 2020.03.22 연산자 (0) 2020.03.22 자바 기본 타입, 입출력 (0) 2020.03.22