JAVA 기초 정리(5)-손 글씨 간단 한 linkedlist 로 linkedlist 학습
2983 단어 자바
링크 용기 도 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 와 유사 하 며 스 레 드 안전 만 추 가 했 을 뿐 효율 이 낮 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.