선형 표 의 순서 저장 구조의 순서 표 류 의 실현Java
우선 순서 표 의 정 의 를 살 펴 보 자.
선형 표 의 순서 저장 은 연속 적 인 메모리 유닛 으로 선형 표 의 데이터 요 소 를 순서대로 저장 하 는 것 이다. 요소 가 메모리 에 있 는 물리 적 저장 순 서 는 선형 표 에서 의 논리 적 순서 와 같다. 즉, 요소 ai 는 직접 전구 ai - 1 과 직접 후계 ai + 1 의 저장 위치 와 인접 하 다.순차 적 으로 저 장 된 선형 표 도 순서 표 (sequential list) 가 된다.
순서 표 류 SeqList 는 선형 표 가 순서 저장 구 조 를 바탕 으로 하 는 실현 을 제공 합 니 다. 이 는 두 개의 개인 구성원 변수 table 과 n 이 있 고 table 은 요 소 를 저장 하 는 대상 배열 입 니 다.n 은 선형 표 길이, n ≤ table. length.SeqList 성명 은 다음 과 같 습 니 다. 선형 표 의 인터페이스 LList 를 실현 합 니 다.
package dataStructure.linearList;
import dataStructure.linearList.LList;
public class SeqList implements LList // ,
{
private Object[] table; // ,
private int n; //
public SeqList(int capacity) // ,
{
this.table = new Object[Math.abs(capacity)];
this.n = 0;
}
public SeqList() //
{
this(16);
}
public boolean isEmpty() // , true
{
return this.n == 0;
}
public int length() //
{
return this.n;
}
public E get(int index) // index( 0) , , null
{
if(index>=0 && index < this.n)
{
return (E)this.table[index];
}
return null;
}
public E set(int index,E element) // index element, , , null
{
if(index >= 0 && index < this.n && element != null)
{
E old =(E)this.table[index];
this.table[index] = element;
return old;
}
return null;
}
public boolean add(int index,E element) // index element , true, null
{
if(element == null) // null
{
return false;
}
if(this.n == table.length) // ,
{
Object[] temp = this.table;
this.table = new Object[temp.length*2]; //
for(int i = 0;i < temp.length;i++)
{
this.table[i] = temp[i];
}
}
if(index < 0) //
{
index = 0;
}
if(index > this.n)
{
index =this.n;
}
for(int j = this.n-1;j >= index;j--) // , n/2
{
this.table[j+1] = this.table[j];
}
this.table[index] = element;
this.n++;
return true;
}
public boolean add(E element) // element
{
return add(this.n,element);
}
public E remove(int index) // index , , , null
{
if(this.n != 0 && index >= 0 && index < this.n)
{
E old = (E)this.table[index];
for(int j = index;j < this.n-1;j++) // , n/2
{
this.table[j] = this.table[j + 1];
}
this.table[this.n - 1] = null;
this.n--;
return old;
}
return null;
}
public void clear() //
{
if(this.n != 0)
{
for(int i = 0;i < this.n;i++)
{
this.table[i] = null;
}
this.n=0;
}
}
public String toString() // , (,)
{
String str = "(";
if(this.n != 0)
{
for(int i = 0;i < this.n - 1;i++)
{
str += this.table[i].toString()+",";
}
str += this.table[this.n - 1].toString();
}
return str + ")";
}
}
순서 표 는 모든 요 소 를 액세스 하 는 get (), set () 방법의 시간 복잡 도 는 O (1) 입 니 다.
순서 표를 삽입 하거나 삭제 하 는 작업 은 알고리즘 이 걸 리 는 시간 은 주로 요 소 를 이동 하 는 데 사 용 됩 니 다.등 확률 상황 에서 하나의 요 소 를 삽입 하려 면 평균 절반 의 요 소 를 이동 해 야 하고 시간 복잡 도 는 O (n) 이다.같은 맥락 에서 하나의 요 소 를 삭제 하 는 시간 복잡 도 는 O (n) 입 니 다.
상술 한 바 와 같이 순서 표 는 다음 과 같은 특징 을 가지 고 있다.
①: 요소 의 물리 적 저장 순 서 는 표 에 있 는 요소 의 논리 적 순 서 를 직접 반영 하여 요 소 를 무 작위 로 액세스 할 수 있다.
② 삽입 및 삭제 작업 효율 이 낮다.하나의 요 소 를 삽입 하거나 삭제 할 때마다 대량의 요 소 를 이동 해 야 할 수 있 습 니 다. 평균 이동 횟수 는 순서 표 길이 의 절반 입 니 다.게다가 배열 의 용량 은 변경 할 수 없고 용량 이 작 아서 데이터 가 넘 치 거나 용량 이 너무 커서 메모리 자원 의 낭 비 를 초래 하 는 문제 가 존재 한다.데이터 넘 침 을 해결 하 는 방법 은 다른 대 용량 의 배열 을 신청 하고 배열 요 소 를 복사 하 는 것 이지 만 삽입 작업 효율 이 낮다.
다음 장 에서 저 는 여러분 과 순서 표 로 조세 프 문 제 를 해결 하 는 것 을 토론 할 것 입 니 다 (조세 프 링).
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.