ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.