자바 는 링크 에서 요소 의 획득,조회 와 수정 방법 에 대한 상세 한 설명 을 실현 합 니 다.

본 고 는 자바 가 링크 에서 요소 의 획득,조회 와 수정 방법 을 실현 하 는 것 을 실례 로 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
이 절 은 지난 절자바 링크 에 요소 추가를 바탕 으로 우리 의 링크 관련 방법 을 계속 보완 하 는 것 입 니 다.이 절 에서 우 리 는 링크 의 요 소 를 어떻게 얻 고 요 소 를 조회 하 며 요 소 를 수정 하 는 지 에 중심 을 두 고 공부 합 니 다.
요소 가 져 오기
1.링크 의 요 소 를 얻 는 방법 에 대한 분석
우 리 는 가상 헤드 노드 를 사 용 했 기 때문에 우 리 는 매번 첫 번 째 실제 노드 부터 시작 해 야 하기 때문에 먼저 가상 헤드 노드 의 다음 노드 가 누구 인지 얻 은 다음 에 이 를 바탕 으로 옮 겨 다 니 며 작업 을 해 야 한다.관련 코드 는 다음 과 같다.

 //      index(0-based)        (     ,   )
  public E get(int index) {
    //     
    if (index < 0 || index >= size) {
      throw new IllegalArgumentException("Get failed,Illegal index");
    }

    Node<E> cur = dummyHead.next;
    for (int i = 0; i < index; i++) {
      cur = cur.next;
    }
    return cur.e;
  }
2.링크 의 첫 번 째 요 소 를 획득
이 방법 은 get()방법 에 의존한다.

 //          
  public E getFirst() {
    return get(0);
  }
3.링크 의 마지막 요 소 를 획득
이 방법 페이지 는 get()방법 에 의존 합 니 다.

 //           
  public E getLast() {
    return get(size - 1);
  }
2.링크 요소 수정
우 리 는 가상 헤드 노드 를 사 용 했 기 때문에 우 리 는 매번 첫 번 째 실제 노드 부터 시작 해 야 하기 때문에 먼저 가상 헤드 노드 의 다음 노드 가 누구 인지 얻 은 다음 에 이 를 바탕 으로 옮 겨 다 니 며 작업 을 해 야 한다.관련 코드 는 다음 과 같다.

  //      index(0-based)        (     ,   )
  public void set(int index, E e) {
    //     
    if (index < 0 || index >= size) {
      throw new IllegalArgumentException("update failed,Illegal index");
    }

    Node<E> cur = dummyHead.next;
    for (int i = 0; i < index; i++) {
      cur = cur.next;
    }
    cur.e = e;
  }
3.원소 가 있 는 지 판단 하기 e
우 리 는 가상 헤드 노드 를 사 용 했 기 때문에 우 리 는 매번 첫 번 째 진실 노드 부터 시작 해 야 한다.따라서 가상 헤드 노드 의 다음 노드 가 누구 인지 먼저 얻 은 다음 에 주어진 요소 값 과 링크 의 요소 값 내용 이 같 는 지 판단 해 야 한다.(equals()방법 이 같 으 면 true 로 돌아 가 고 그렇지 않 으 면 false 로 돌아 가 야 한다.

 //          e
  public boolean contains(E e) {
    Node<E> cur = dummyHead.next;
    while (cur != null) {
      if (cur.e.equals(e)) {
        return true;
      }
      cur = cur.next;
    }
    return false;
  }
4.toString()방법의 재 작성
이 링크 대상 을 출력 할 때 사용자 정의 정 보 를 볼 수 있 도록 toString()을 재 작성 하고 개조 합 니 다.

//  object ,    
  @Override
  public String toString() {
    StringBuilder res = new StringBuilder();
    Node<E> cur = dummyHead.next;
    while (cur != null) {
      res.append(cur + "->");
      cur = cur.next;
    }

    res.append("NULL");

    return res.toString();
  }
이때 이 방법 은

 //  object ,    
  @Override
  public String toString() {
    StringBuilder res = new StringBuilder();

    for (Node<E> cur = dummyHead.next; cur != null; cur = cur.next) {
      res.append(cur + "->");
    }
    res.append("NULL");

    return res.toString();
  }
테스트
main 함 수 를 새로 만 들 고 관련 테스트 코드 를 다음 과 같이 작성 합 니 다.

package LinkedList;

public class TestMain {
  public static void main(String[] args) {
    LinkedList<Integer> linkedList = new LinkedList<Integer>();

    System.out.println("============       ============");
    for (int i = 0; i < 5; i++) {
      linkedList.addFirst(i);
      System.out.println(linkedList);
    }


    System.out.println("============    ============");
    linkedList.set(2,666);
    System.out.println(linkedList);
  }
}
결 과 는:

결과 분석:링크 의 머리 에 요 소 를 추가 하기 때문에 최종 적 으로 결 과 는 오른쪽 에서 왼쪽으로,가장 오른쪽 은 NULL(즉 마지막 노드)로 나 타 났 다.
자바 알고리즘 과 관련 된 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기