코드 사본은 다음과 같습니다.
import java.util.arrays;
/**
* 순차적 선형 테이블 구현
*/
공개 클래스 Linelist <e> {
개인 int 크기; // 길이
개인 객체 [] 배열; // 기본 배열
개인 최종 int default_length = 16; // 기본 길이
/**
* 비 매개 변수 구성 방법
*/
public linelist () {
크기 = 0;
// 기본 길이를 사용하여 배열을 구성합니다
배열 = 새 개체 [default_length];
}
/**
* 구조 길이를 지정하십시오
* @param 길이 초기 길이를 지정합니다
*/
공개 linelist (int length) {
if (길이 <0) {
새로운 불법 행위 ( "초기 길이는 불법 :"+길이);
}
// 지정된 길이로 배열을 구성합니다
배열 = 새 개체 [길이];
}
/**
* 시공의 초기화 요소와 길이를 지정하십시오
* @param 요소 초기화 요소
* @param 길이 초기화 길이
*/
public linelist (e 요소, int 길이) {
if (길이 <1) {
새로운 불법 행위 ( "초기 길이는 불법 :"+길이);
}
// 지정된 길이로 배열을 구성합니다
배열 = 새 개체 [길이];
// 첫 번째 요소를 초기화합니다
배열 [0] = 요소;
크기 ++;
}
/**
* 시공의 초기화 요소를 지정하십시오
* @param 요소 초기화 요소
*/
공개 linelist (e 요소) {
// 기본 길이로 배열을 초기화합니다
배열 = 새 개체 [default_length];
// 첫 번째 요소를 초기화합니다
배열 [0] = 요소;
}
/**
* 요소 수를 얻으십시오
*/
public int size () {
반환 크기;
}
/**
* 비어 있는지 확인하십시오
*/
공개 부울 isempty () {
반환 크기 == 0;
}
/**
*이 요소가 포함되어 있는지 확인하십시오
*/
공개 부울은 (e e) {
if (indexof (e) == -1) {
거짓을 반환합니다.
}
진실을 반환하십시오.
}
/**
* 배열로 형식
*/
공개 대상 [] toArray () {
return arrays.copyof (배열, 크기);
}
/**
* 선형 테이블의 꼬리에 요소 추가
* @param e
* @반품
*/
공개 void Add (e e) {
ExtendCapacity (size+1);
배열 [size] = e;
크기 ++;
}
/**
* 용량 확장
* @param 길이 필요한 길이
*/
개인 void extendCapacity (int length) {
// 현재 배열 길이와 필요한 길이는 최대 값이어야합니다.
int mincapacity = math.max (array.length, length);
// 용량 확장이 필요한지 판단합니다
if (mincapacity -array.length> 0) {
// 배열 길이는 절반으로 증가합니다
int newlength = array.length + array.length/2;
// 새 길이가 요구 사항보다 작은 경우 필요한 길이를 배열 길이로 사용하십시오.
if (newlength <mincapacity) {
Newlength = mincapacity;
}
// 배열 길이는 정수를 초과 할 수 없습니다 .max_value
if (newlength> integer.max_value -8) {
newlength = integer.max_value;
}
// 배열 확장
Array = arrays.copyof (Array, Newlength);
}
}
/**
* 선형 테이블 에서이 모든 요소를 제거하십시오
* @param e 제거 해야하는 요소
* @반품
*/
공개 void removeall (e e) {
if (e == null) {
for (int i = 0; i <size; i ++) {
if (배열 [i] == null) {
Fastremove (I);
}
}
}또 다른{
for (int i = 0; i <size; i ++) {
if (e.equals (array [i]) {
Fastremove (I);
}
}
}
}
/**
* 인덱스에서 요소를 삭제하고 다음 요소를 차례로 앞으로 움직입니다.
* @param index 삭제 해야하는 색인
*/
개인 void fastremove (int index) {
if (size-index-1> 0) {
// 배열은 index+1에서 시작하고 모두 앞으로 이동합니다
System.ArrayCopy (배열, 인덱스+1, 배열, 인덱스, 크기 -1);
}
// 마지막 요소를 비우십시오
배열 [-size] = null;
}
/**
* 선형 테이블을 지우십시오
*/
public void clear () {
// 모든 배열을 NULL로 채 웁니다
Array.fill (배열, NULL);
// 요소 수를 0으로 변경합니다
크기 = 0;
}
/**
* 인덱스에서 요소를 가져옵니다
* @param 색인
* 인덱스에서 @return 요소
*/
@suppresswarnings ( "확인되지 않은")
public e get (int index) {
CheckIndex (색인);
반환 (e) 배열 [index];
}
/**
* 인덱스가 한계를 벗어 났는지 확인하십시오
* @param 색인
*/
개인 void CheckIndex (int index) {
if (index> = size || index <0) {
새로운 IndexOutOfBoundSexection ( "IndexOutBoundSexception")을 던지십시오.
}
}
/**
* 인덱스의 요소를 새 요소로 수정합니다.
* @Param 인덱스 인덱스 위치
* @param 요소
* 원래 인덱스의 @return 요소
*/
@suppresswarnings ( "확인되지 않은")
public e set (int index, e element) {
CheckIndex (색인);
e e = (e) 배열 [index];
배열 [index] = 요소;
반환 e;
}
/**
* 지정된 인덱스에 지정된 요소를 삽입하십시오
* @Param 인덱스 인덱스 위치
* @param 요소
*/
public void add (int index, e element) {
// 색인을 확인합니다
CheckIndex (색인);
// 용량을 확장해야합니다
ExtendCapacity (size+1);
// 배열을 복사하십시오
System.ArrayCopy (배열, 인덱스, 배열, 인덱스+1, 크기-인덱스);
배열 [index] = 요소;
}
/**
* 인덱스에서 요소를 제거하십시오
* @Param 인덱스 인덱스
* @return 삭제 된 요소
*/
@suppresswarnings ( "확인되지 않은")
public e 제거 (int index) {
CheckIndex (색인);
// 색인 위치 요소를 가져옵니다
e e = (e) 배열 [index];
Fastremove (색인);
반환 e;
}
/**
* 요소가 처음 나타나는 위치의 색인을 가져옵니다.
* @param e 요소를 찾습니다
* @return -1 인 경우 선형 테이블 에이 요소가 없음을 의미합니다.
*/
공개 int indexof (e e) {
if (e == null) {
for (int i = 0; i <size; i ++) {
if (e == array [i]) {
반환 i;
}
}
}
for (int i = 0; i <size; i ++) {
if (e.equals (array [i]) {
반환 i;
}
}
반품 -1;
}
/**
* 요소의 마지막 발생 인덱스를 얻으십시오.
* @param e 요소를 찾습니다
* @return -1 인 경우 선형 테이블 에이 요소가 없음을 의미합니다.
*/
public int lastindexof (e e) {
// 요소가 무효인지 판단합니다
if (e == null) {
for (int i = size-1; i> = 0; i-) {
if (e == array [i]) {
반환 i;
}
}
}
for (int i = size-1; i> = 0; i-) {
// null이면 여기에서 nullpoint 예외가 실행됩니다
// 확인을 추가해야합니다.
if (e.equals (array [i]) {
반환 i;
}
}
반품 -1;
}
/**
* 선형 테이블을 절단하십시오
* @param fromIndex 시작 색인
* @param toindex end index
* @return은 선형 테이블을 가로 채었다
*/
@suppresswarnings ( "확인되지 않은")
public linelist <e> subrist (int fromindex, int toindex) {
// 시작 색인이 한계를 벗어난 지 판단합니다
if (fromindex <0 || fromIndex> = size) {
새로운 IndexOutOfBoundSexception을 던지십시오 ( "Index Cross-Vorder 시작 :"+FromIndex);
}
// 종료 인덱스가 한계를 벗어 났는지 판단합니다
if (toIndex> = size || fromIndex <0) {
새로운 IndexOutOfBoundSexception을 던지십시오 ( "End Index Outbound :"+ToIndex);
}
// 시작 색인 및 종료 인덱스가 올바른지 판단합니다.
if (index> toindex) {
Throw New ImperalArgumentException ( "매개 변수가 잘못되면 시작 색인이 최종 인덱스보다 크거나 같아야합니다");
}
linelist <e> list = new linelist <e> ();
for (int i = fromIndex, j = toindex; i <= j; i ++) {
list.add ((e) 배열 [i]);
}
반환 목록;
}
}