JAVA 기초 정리(5)-손 글씨 간단 한 linkedlist 로 linkedlist 학습

2983 단어 자바
LinkedList 클래스
링크 용기 도 jdk 소스 코드 를 비교 학습 합 니 다.
1.결점 유형 정의class Node{
E item;
Node next;
Node prev;

Node(Nodeprev,E item,Nodenext){
    this.prev=prev;
    this.next=next;
    this.item=item;
}
Node(E item){
    this.item=item;
}

} private static class Node {
E item;
Node next;
Node prev;

Node(Node prev, E element, Node next) {
    this.item = element;
    this.next = next;
    this.prev = prev;
}

}
분석:
(1)Node 의 접근 권한 은 private 입 니 다.이것 은 링크 내부 에서 사용 하 는 결점 류 이기 때 문 입 니 다.
(2)처음에 결점 의 구조 함수 가 왜 prev 와 next 에 들 어 가 는 지 이해 하지 못 했 지만 사실은 결점 의 가장 간단 한 전 참 구조 이다.모 를 때 null 을 전달 하면 되 고 결점 이 링크 에 삽입 할 때 값 을 부여 하면 된다.
2.노드 추가(index 없 이 바로 끝 삽입)public void add(Node node){
if(first==null){//           ,       ,            。
    first=node;
    last=node;
    node.prev=null;
    node.next=null;
}
else {//            ,            ,     。
    node.prev=last;
    last.next=node;
    last=node;
}
    size++;//      。

}
노드 를 추가 하 는 절차(여 기 는 모두 꼬리 삽입 만 고려 합 니 다):
1.첫 번 째 결점 이 라면 first 와 last 를 동시에 주 고 이 결점 의 앞 뒤 가 비어 있다.
2.첫 번 째 노드 가 아니라면 먼저 링크 의 last 를 이 노드 의 전구 에 주 고 이 노드 를 링크 의 last 의 후계 에 준 다음 에 링크 의 last 노드 를 현재 node 로 업데이트 합 니 다.void linkLast(E e) {
final Node l = last;
final Node newNode = new Node<>(l, e, null);
last = newNode;
if (l == null)
    first = newNode;
else
    l.next = newNode;
size++;
modCount++;

}
(1)삽입 할 때 들 어 오 는 것 은 데이터 일 것 입 니 다.데 이 터 를 결점 으로 봉 하 는 일 은 내부 에서 해 야 합 니 다.
(2)나머지 논리 적 차 이 는 크 지 않다.
3.노드 삭제(index 포함)public void delete(int index){
size--;
Node current=first;
for(int i=1;i<=index-1;i++){
    current = current.next;
}
if(current.equals(first)){
    first=current.next;
}
if (current.equals(last)){
    last=current.prev;
}
else {
    current.prev.next = current.next;
    current.next.prev = current.prev;
}

}
(모두 범위 문 제 를 고려 하지 않 는 다)
분석:머리 와 꼬리 위 치 는 단독으로 고려 하고 나머지 위치 지침 은 대응 하 는 변 화 를 가리 키 면 된다.E unlink(Node x) {
final E element = x.item;
final Node next = x.next;
final Node prev = x.prev;

if (prev == null) {
    first = next;
} else {
    prev.next = next;
    x.prev = null;
}

if (next == null) {
    last = prev;
} else {
    next.prev = prev;
    x.next = null;
}

x.item = null;
size--;
modCount++;
return element;

}
논리 가 기본적으로 같 고 삭제 할 때 이런 조작 이 있 습 니 다.f.item = null;
f.next = null; // help GC

help gc 의 작은 방침.
4.노드 의 데 이 터 를 수정 합 니 다.
(1)이 index 결점 을 두루 찾 습 니 다.
(2)아 이 템 수정
5.지정 한 데이터 찾기
(1)이 index 결점 을 두루 찾 습 니 다.
(2)아 이 템 꺼 내기
Vector 스 레 드 는 안전 하고 arraylist 와 유사 하 며 스 레 드 안전 만 추 가 했 을 뿐 효율 이 낮 습 니 다.

좋은 웹페이지 즐겨찾기