구현
직접 구현을 한번 해보자
자바에서 제공하는 ArrayList처럼 가변하지는 못하지만
배열로 만들어서 기본적인 기능들은 구현한다.
add,remove등만 일단 구현을 목표로 한다.
이때 arrayList 처럼 사용자는 객체를 생성후
add remove등을 통해서 관리한다.
또한 원하는 자료형을 사용가능하게 해준다.
사전 정리
기본적인 기능들은 다음과 같다.
1. add
2. remove
3. indexOf (원하는 데이터 선택시 해당 데이터의 주소 반환)
4. get (인덱스 입력시 해당 인덱스의 데이터 리턴)
5. sizeOf (현재 저장된 데이터 수 반환)
6. Iterator
Iterator
반복문과 함께 리스트를 반복작업 하기 위해 사용하는 "객체"이다.
주요 기능은 3가지로
Iterator.hasNext(); - 다음값이 들어있는지 확인후 boolean 리턴
Iterator.next(); - 다음 값 가져오기
Iterator.remove(); - next로 가져온 데이터 리스트 내에서 삭제
여기에 추가로
Iterator.hasPrev(); - 이전값이 들어있는지 확인후 boolean 리턴
Iterator.prev(); - 이전 값 가져오기
Iterator.add(); - next()로 가져온 데이터 이후에 하나 추가
자세한 공부는 추후 더 하고 지금은 구현만 생각하기
CODE
package ArrayList;
import java.util.ListIterator;
public class ArrayList {
private Object []obj=new Object[100];
private int nowIdx=0;
public boolean addLast(Object data)
{
obj[nowIdx]=data;
nowIdx++;
return true;
}
public boolean add(int idx,Object data){
if (idx>nowIdx){
System.out.println("잘못된 주소를 입력하셨습니다.");
return false;
}
for(int i=nowIdx;i>idx;i--)
obj[i]=obj[i-1];
obj[idx]=data;
nowIdx++;
return true;
}
public boolean addFirst(Object data){
return add(0,data);
}
@Override
public String toString(){
String str="[";
for(int i=0;i<nowIdx;i++)
{
str+=obj[i];
str+=',';
}
return str+"]";
}
public Object remove(int idx){
if(nowIdx==0)
{
System.out.println("현재 저장된 데이터가 없습니다!");
return null;
}
if(!(idx>=0&&idx<nowIdx))
{
System.out.println("현재 존재하지 않는 인덱스를 제거하려 하셨어요!");
return null;
}
Object tmp=obj[idx];
for(int i=idx;i<nowIdx-1;i++)
obj[i]=obj[i+1];
nowIdx--;
obj[nowIdx]=null;
return tmp;
}
public Object remove(Object data){
for(int i=0;i<nowIdx;i++)
if(obj[i]==data)
return remove(i);
return false;
}
public Object removeFisrt(){
return remove(0);
}
public Object removeLast(){
return remove(nowIdx-1);
}
public Object get(int idx){
if(!(idx>=0&&idx<nowIdx))
{
System.out.println("현재 찾으시는 인덱스에 저장된 데이터는 존재하지 않습니다.");
return null;
}
return obj[idx];
}
public int indexOf(Object data){
for(int i=0;i<nowIdx;i++)
if(obj[i].equals(data))
return i;
System.out.printf("현재 %s는 저장되어 있지 않습니다",data.toString());
return -1;
}
public int sizeOf(){return nowIdx;}
public ListIterator ListIterator(){
return new ListIterator();
}
private class ListIterator{
private int IterIdx=0;
public boolean hasNext(){
return sizeOf()>IterIdx;
}
public Object Next(){
return obj[IterIdx++];
}
public boolean hasPrev(){
return IterIdx>0;
}
public Object Prev(){
return obj[--IterIdx];
}
public boolean add(Object data){
return ArrayList.this.add(IterIdx, data);
}
public boolean remove(){
return ArrayList.this.remove(--IterIdx);
}
}
}