반응형

오브젝트의 사이즈 불러오기

package list.arraylist.implementation;

import java.util.ArrayList;

public class Main {

    public static void main(String[] args) {

        arraylist numbers = new arraylist();
        numbers.addLast(10);
        numbers.addLast(20);
        numbers.addLast(30);

        //중간에 집어넣기
        numbers.addMid(1, 15);
        ;

        System.out.println(numbers.size());

    }
}
package list.arraylist.implementation;

public class arraylist {
    private int size = 0;
    private Object[] elementData = new Object[100];

    public boolean addLast(Object element){
        elementData[size] = element;
        size++;
        return true;
    }

    public boolean addMid(int index, Object element){
        //elementData[size] = elementData[size-1]
        for(int i=size-1; i>=index; i--){
            elementData[i+1] = elementData[i];
        }
        elementData[index] = element;
        size++;
        return true;

    }
    public boolean addFirst(int index, Object element){
        return addMid(0, element);
    }

    //삭제하면서 리턴 값으로 삭제된 element를 출력할거임
    public Object remove(int index){
        Object removed = elementData[index];
        //elementData[1] = elementData[2];
        for(int i=index+1; i<=size-1; i++){
            elementData[i-1] = elementData[i];
        }
        size--;
        //맨 마지막꺼 삭제해주기 위해
        elementData[size] = null;
        return removed;
    }

    public String toString(){
        String str = "[";
        for (int i=0; i<size; i++){
            str += elementData[i];
            if(i < size-1){
                str +=",";
            }

        }

        return str + "]";
    }

    public Object removeFirst(){
        return remove(0);
    }
    public Object removeLast(){
        return remove(size-1);
    }

    public Object get(int index){
        return elementData[index];
    }
    
    //사이즈 보내주는 메소드
    public int size(){
        return size;
    }

}

객체를 받아서 인덱스번호 찾기

package list.arraylist.implementation;

import java.util.ArrayList;

public class Main {

    public static void main(String[] args) {

        arraylist numbers = new arraylist();
        numbers.addLast(10);
        numbers.addLast(20);
        numbers.addLast(30);

        //중간에 집어넣기
        numbers.addMid(1, 15);
        ;

        System.out.println(numbers.indexOf(10));

    }
}

출력 0
    //인덱스 찾기
    public int indexOf(Object o){
        for (int i=0; i < size; i++){
            if(o.equals(elementData[i])) {
                return i;
            }
        }
        return -1;
    }
    
    

Iterator

이터레이터(반복문) 메소드 만들기

 

 

next

hasNext

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.addMid(1, 15);
        ;

        arraylist.ListIterator li = numbers.listIterator();
        while(li.hasNext()){
            System.out.println(li.next());
        }



    }
}

arraylist클래스 안에 ListIterator이라는 클래스를 하나 만들어 줄것이고,

li는 numbers.listiterator();이라는 메소드는 ListIterator이라는 새로운 데이터 타입을 반환해준다.

public ListIterator listIterator(){
        return new ListIterator();
    }

    class ListIterator{
        private int nextIndex = 0;
        public Object next(){
//            Object returnData = elementData[nextIndex];
//            nextIndex++;
//            return returnData;
            return elementData[nextIndex++];
        }
        public boolean hasNext(){
            return nextIndex < size();
        }
    }

주석처리된 3줄은 elementData[nextIndex++]를 풀어놓은 것이다.

결과는 for문으로 만들었을 때와 같이 10 15 20 30이 나온다.

 

 

previous

hasPrevious

   arraylist.ListIterator li = numbers.listIterator();
        while (li.hasNext()){
            System.out.println(li.next());
        }

        while (li.hasPrevious()) {
            System.out.println(li.previous());
        }
        
        출력
        10
        15
        20
        30
        30
        20
        15
        10

 

class ListIterator{
        private int nextIndex = 0;

        public Object next(){
//            Object returnData = elementData[nextIndex];
//            nextIndex++;
//            return returnData;
            return elementData[nextIndex++];
        }
        public boolean hasNext(){
            return nextIndex < size();
        }
        public Object previous(){
            return elementData[--nextIndex];
        }
        public boolean hasPrevious(){
            return nextIndex > 0;
        }
    }

add

    	arraylist.ListIterator li = numbers.listIterator();
        	while (li.hasNext()){
           		int number = (int) li.next();
            	if(number == 20){
                	li.add(25);
            	}
        	}
        
        =================================

        public void add(Object element){
            arraylist.this.add(nextIndex++, element);
        }
        

remove

        arraylist.ListIterator li = numbers.listIterator();
        while (li.hasNext()){
           int number = (int) li.next();
            if(number == 20){
                li.remove();
            }
        }

        System.out.println(numbers);
=========================================
        public void remove(){
            arraylist.this.remove(nextIndex-1);
            --nextIndex;
        }

 

ARRAY LIST 마무리

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.add(1, 15);
        ;

        arraylist.ListIterator li = numbers.listIterator();
        while (li.hasNext()){
           int number = (int) li.next();
            if(number == 20){
                li.remove();
            }
        }

        System.out.println(numbers);




    }
}
package list.arraylist.implementation;

import java.util.ArrayList;

public class arraylist {
    private int size = 0;
    private Object[] elementData = new Object[100];

    public boolean addLast(Object element){
        elementData[size] = element;
        size++;
        return true;
    }

    public boolean add(int index, Object element){
        //elementData[size] = elementData[size-1]
        for(int i=size-1; i>=index; i--){
            elementData[i+1] = elementData[i];
        }
        elementData[index] = element;
        size++;
        return true;

    }
    public boolean addFirst(int index, Object element){
        return add(0, element);
    }

    //삭제하면서 리턴 값으로 삭제된 element를 출력할거임
    public Object remove(int index){
        Object removed = elementData[index];
        //elementData[1] = elementData[2];
        for(int i=index+1; i<=size-1; i++){
            elementData[i-1] = elementData[i];
        }
        size--;
        //맨 마지막꺼 삭제해주기 위해
        elementData[size] = null;
        return removed;
    }

    public String toString(){
        String str = "[";
        for (int i=0; i<size; i++){
            str += elementData[i];
            if(i < size-1){
                str +=",";
            }

        }

        return str + "]";
    }

    public Object removeFirst(){
        return remove(0);
    }
    public Object removeLast(){
        return remove(size-1);
    }

    public Object get(int index){
        return elementData[index];
    }

    //사이즈 보내주는 메소드
    public int size(){
        return size;
    }

    //인덱스 찾기
    public int indexOf(Object o){
        for (int i=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 Object next(){
//            Object returnData = elementData[nextIndex];
//            nextIndex++;
//            return returnData;
            return elementData[nextIndex++];
        }
        public boolean hasNext(){
            return nextIndex < size();
        }
        public Object previous(){
            return elementData[--nextIndex];
        }
        public boolean hasPrevious(){
            return nextIndex > 0;
        }
        public void add(Object element){
            arraylist.this.add(nextIndex++, element);
        }
        public void remove(){
            arraylist.this.remove(nextIndex-1);
            --nextIndex;
        }
    }
}
반응형

+ Recent posts