순서 표 생 성 및 옮 겨 다 니 기

1. 순서 표 는 컴퓨터 메모리 에 배열 로 저 장 된 선형 표 로 주소 연속 저장 장치 로 데이터 요 소 를 순서대로 저장 하 는 선형 구 조 를 말한다.선형 표 는 순서대로 저장 하 는 방식 으로 저장 하 는 것 을 순서 표 라 고 한다.순서 표 는 표 의 결산 점 을 컴퓨터 메모리 의 주소 연속 저장 장치 에 순서대로 저장 하 는 것 이다.2. 순서 표 특징: 표 에 있 는 요 소 를 연속 적 인 저장 장치 에 하나씩 저장 합 니 다. 이러한 저장 구 조 는 순서 구조 자바 언어 에서 의 순서 저장 구조 입 니 다.
//           
public class SequenceList<T> implements Iterable{
     
	//         
    private T[] eles;
    //             
    private int N;
   }

(1) 배열 초기 화
public SequenceList(int capacity){
     
        //     
        this.eles =(T []) new Object[capacity];
        //     
        this.N = 0;
    }

(2) 선형 표를 빈 표 로 설정 합 니 다.
public void clear(){
     
        this.N=0;
    }

원소 의 개 수 를 0 으로 만 들 면 된다.
(3) 우선 선형 표 가 빈 표 인지 판단
public boolean isEmpty(){
     
        return N==0;
    }

원소 가 0 이면 빈 표 입 니 다.
(4) 전선 선형 표 의 길이
public int length(){
     
        return N;
    }

N 의 개 수 는 선형 표 의 길이 이다.
(5) 선형 표 에 요소 삽입
public void insert(T t){
     
        
        eles[N++] = t;
    }

삽입 요 소 를 N 에 직접 부여 하 는 다음 값 이지 만 선형 표 의 용량 이 부족 할 수 있 으 므 로 선형 표 가 용량 이 부족 할 때 자동 으로 용량 을 늘 릴 수 있 는 방법 을 만 듭 니 다.
public void resize(int newSize){
     
        //        ,     
        T [] temp = eles;
        //     
        eles=(T[]) new Object[newSize];
        //               
        for (int i=0;i<N;i++){
     
            eles[i]=temp[i];
        }
    }

그래서 새로운 삽입 방법 은
public void insert(T t){
     
        if (N==eles.length){
     
            resize(2* eles.length);
        }
        eles[N++] = t;
    }

(6) 지정 한 위치 i 에 요소 t 삽입
public void insert(int i,T t){
     
        if (N==eles.length){
     
            resize(2* eles.length);
        }

        //  i                     
        for (int index=N;index>i;index--){
     
            eles[index]=eles[index-1];
        }

        //  t    i     
        eles[i]=t;

        N++;

    }

먼저 i 색인 에 있 는 요소 기계 뒤의 요 소 를 순서대로 뒤로 이동 시 키 고 t 가 출입 하 는 위 치 를 비 운 다음 에 t 요 소 를 i 색인 에 놓 으 면 됩 니 다.
(7) 지 정 된 위치 i 에 있 는 요 소 를 삭제 하고 이 요 소 를 되 돌려 줍 니 다.
public T remove(int i){
     

        //    i   
        T current = eles[i];

        //  i              
        for (int index=i;index<N-1;index++){
     
            eles[index]=eles[index+1];
        }

        //      
        N--;

        if (N<eles.length/4){
     
            resize(eles.length/2);
        }
        return current;
    }

i 의 값 을 기록 하고 돌아 올 때 i 의 값 을 제시 한 다음 에 i 뒤의 요 소 를 순서대로 앞으로 이동 하면 됩 니 다. 요소 의 개 수 를 1 로 줄 이면 됩 니 다.
(8) 지정 한 i 곳 의 값 가 져 오기
 public T get(int i ){
     
        return eles[i];
    }

(9) i 요소 가 처음 나타 난 위 치 를 조회 합 니 다.
public int indexof(T t){
     
        for (int i=0;i<N;i++){
     
            if (eles[i].equals(t)){
     
                return i;
            }
        }
        return -1;
    }

위의 것 은 이미 사용 할 수 있 습 니 다. 테스트 코드 는 다음 과 같 습 니 다.
public class SequenceListTest {
     
    public static void main(String[] args) {
     
        //       

        SequenceList<String> s1 = new SequenceList<>(10);

        //    
        s1.insert("  ");
        s1.insert("   ");
        s1.insert("   ");
        s1.insert(1,"linlin");

       
        System.out.println("===========");
        //    
        String getResult = s1.get(1);
        System.out.println("    1     "+getResult);
        //    
        String removeResult= s1.remove(0);
        System.out.println("      "+removeResult);
        //    
        s1.clear();
        System.out.println("              "+s1.length());
    }
}

기본 적 인 선형 표 는 이미 만 들 어 졌 습 니 다. 이미 사용 할 수 있 습 니 다. 그러나 이 를 잘 옮 겨 다 니 기 위해 서 는 Iterab 인터페이스 implements Iterable 를 계승 하고 iterator 방식 을 실현 해 야 합 니 다. 이 방법 을 실현 할 때 직접 실현 할 수 없습니다. 따라서 우 리 는 내부 클래스 인 SIteratour 를 만 들 고 Iterator 를 계승 할 수 있 습 니 다. 우리 가 필요 로 하 는 두 가지 방법 만 있 습 니 다.return 에서 이 종류의 대상 을 되 돌려 주면 < 1 > 은 (1) Iterable 인 터 페 이 스 를 계승 할 수 있 습 니 다.
public class SequenceList<T> implements Iterable

< 2 > iterator 재 작성 방법
public Iterator iterator() {
     
        return new SIterator();
    }

이 돌아 올 때 SIterator 대상 은 아래 에 내부 클래스 를 만들어 서 이 루어 집 니 다.
< 3 > 내부 클래스 SIteratour 를 만 들 고 Iterator 가 처음 만 들 었 을 때 이 를 계승 합 니 다.
private class SIteratour implements Iterator{
     

    @Override
    public boolean hasNext() {
     
        return false;
    }

    @Override
    public Object next() {
     
        return null;
    }
}

우 리 는 cusor 지침 을 만 들 고 처음부터 모든 요 소 를 가리 키 며 구조 방법 에서 0 으로 초기 화 해 야 합 니 다. 첫 번 째 부터 시작 합 니 다.
private class SIterator implements Iterator{
     

        private int cusor;
        public SIterator(){
     
            this.cusor=0;
        }
        @Override
        public boolean hasNext() {
     
            return cusor<N;
        }

        @Override
        public Object next() {
     
            return eles[cusor++];
        }
    }

전체 코드 는 다음 과 같다.
package linear;

import java.util.Iterator;
//      ,    
public class SequenceList<T> implements Iterable {
     
    //       
    private T[] eles;
    //             
    private int N;

    //    
    public SequenceList(int capacity) {
     
        //     
        this.eles = (T[]) new Object[capacity];
        //     
        this.N = 0;
    }

    //          
    public void clear() {
     
        this.N = 0;
    }

    //            
    public boolean isEmpty() {
     
        return N == 0;
    }

    //        
    public int length() {
     
        return N;
    }

    //         
    public T get(int i) {
     
        return eles[i];
    }

    //         t
    public void insert(T t) {
     
        if (N == eles.length) {
     
            resize(2 * eles.length);
        }
        eles[N++] = t;
    }

    // i       t
    public void insert(int i, T t) {
     
        if (N == eles.length) {
     
            resize(2 * eles.length);
        }

        //  i                     
        for (int index = N; index > i; index--) {
     
            eles[index] = eles[index - 1];
        }

        //  t    i     
        eles[i] = t;

        N++;

    }

    //      i    ,      
    public T remove(int i) {
     

        //    i   
        T current = eles[i];

        //  i              
        for (int index = i; index < N - 1; index++) {
     
            eles[index] = eles[index + 1];
        }

        //      
        N--;

        if (N < eles.length / 4) {
     
            resize(eles.length / 2);
        }
        return current;
    }

    //  t          
    public int indexof(T t) {
     
        for (int i = 0; i < N; i++) {
     
            if (eles[i].equals(t)) {
     
                return i;
            }
        }
        return -1;
    }

    //    newSize,  eles   ,     
    public void resize(int newSize) {
     
        //        ,     
        T[] temp = eles;
        //     
        eles = (T[]) new Object[newSize];
        //               
        for (int i = 0; i < N; i++) {
     
            eles[i] = temp[i];
        }
    }

    @Override
    public Iterator iterator() {
     
        return new SIterator();
    }

    private class SIterator implements Iterator {
     

        private int cusor;

        public SIterator() {
     
            this.cusor = 0;
        }

        @Override
        public boolean hasNext() {
     
            return cusor < N;
        }

        @Override
        public Object next() {
     
            return eles[cusor++];
        }
    }
}


테스트 코드
package test;

import linear.SequenceList;

public class SequenceListTest {
     
    public static void main(String[] args) {
     
        //       

        SequenceList<String> s1 = new SequenceList<>(10);

        //    
        s1.insert("  ");
        s1.insert("   ");
        s1.insert("   ");
        s1.insert(1,"linlin");

        for (Object o : s1) {
     
            System.out.println(o);
        }

        System.out.println("===========");
        //    
        String getResult = s1.get(1);
        System.out.println("    1     "+getResult);
        //    
        String removeResult= s1.remove(0);
        System.out.println("      "+removeResult);
        //    
        s1.clear();
        System.out.println("              "+s1.length());
    }
}

좋은 웹페이지 즐겨찾기