순서 표 생 성 및 옮 겨 다 니 기
//
public class SequenceList<T> implements Iterable{
//
private T[] eles;
//
private int N;
}
(1) 배열 초기 화
public SequenceList(int capacity){
//
this.eles =(T []) new Object[capacity];
//
this.N = 0;
}
(2) 선형 표를 빈 표 로 설정 합 니 다.
public void clear(){
this.N=0;
}
원소 의 개 수 를 0 으로 만 들 면 된다.
(3) 우선 선형 표 가 빈 표 인지 판단
public boolean isEmpty(){
return N==0;
}
원소 가 0 이면 빈 표 입 니 다.
(4) 전선 선형 표 의 길이
public int length(){
return N;
}
N 의 개 수 는 선형 표 의 길이 이다.
(5) 선형 표 에 요소 삽입
public void insert(T t){
eles[N++] = t;
}
삽입 요 소 를 N 에 직접 부여 하 는 다음 값 이지 만 선형 표 의 용량 이 부족 할 수 있 으 므 로 선형 표 가 용량 이 부족 할 때 자동 으로 용량 을 늘 릴 수 있 는 방법 을 만 듭 니 다.
public void resize(int newSize){
// ,
T [] temp = eles;
//
eles=(T[]) new Object[newSize];
//
for (int i=0;i<N;i++){
eles[i]=temp[i];
}
}
그래서 새로운 삽입 방법 은
public void insert(T t){
if (N==eles.length){
resize(2* eles.length);
}
eles[N++] = t;
}
(6) 지정 한 위치 i 에 요소 t 삽입
public void insert(int i,T t){
if (N==eles.length){
resize(2* eles.length);
}
// i
for (int index=N;index>i;index--){
eles[index]=eles[index-1];
}
// t i
eles[i]=t;
N++;
}
먼저 i 색인 에 있 는 요소 기계 뒤의 요 소 를 순서대로 뒤로 이동 시 키 고 t 가 출입 하 는 위 치 를 비 운 다음 에 t 요 소 를 i 색인 에 놓 으 면 됩 니 다.
(7) 지 정 된 위치 i 에 있 는 요 소 를 삭제 하고 이 요 소 를 되 돌려 줍 니 다.
public T remove(int i){
// i
T current = eles[i];
// i
for (int index=i;index<N-1;index++){
eles[index]=eles[index+1];
}
//
N--;
if (N<eles.length/4){
resize(eles.length/2);
}
return current;
}
i 의 값 을 기록 하고 돌아 올 때 i 의 값 을 제시 한 다음 에 i 뒤의 요 소 를 순서대로 앞으로 이동 하면 됩 니 다. 요소 의 개 수 를 1 로 줄 이면 됩 니 다.
(8) 지정 한 i 곳 의 값 가 져 오기
public T get(int i ){
return eles[i];
}
(9) i 요소 가 처음 나타 난 위 치 를 조회 합 니 다.
public int indexof(T t){
for (int i=0;i<N;i++){
if (eles[i].equals(t)){
return i;
}
}
return -1;
}
위의 것 은 이미 사용 할 수 있 습 니 다. 테스트 코드 는 다음 과 같 습 니 다.
public class SequenceListTest {
public static void main(String[] args) {
//
SequenceList<String> s1 = new SequenceList<>(10);
//
s1.insert(" ");
s1.insert(" ");
s1.insert(" ");
s1.insert(1,"linlin");
System.out.println("===========");
//
String getResult = s1.get(1);
System.out.println(" 1 "+getResult);
//
String removeResult= s1.remove(0);
System.out.println(" "+removeResult);
//
s1.clear();
System.out.println(" "+s1.length());
}
}
기본 적 인 선형 표 는 이미 만 들 어 졌 습 니 다. 이미 사용 할 수 있 습 니 다. 그러나 이 를 잘 옮 겨 다 니 기 위해 서 는 Iterab 인터페이스
implements Iterable
를 계승 하고 iterator 방식 을 실현 해 야 합 니 다. 이 방법 을 실현 할 때 직접 실현 할 수 없습니다. 따라서 우 리 는 내부 클래스 인 SIteratour 를 만 들 고 Iterator 를 계승 할 수 있 습 니 다. 우리 가 필요 로 하 는 두 가지 방법 만 있 습 니 다.return 에서 이 종류의 대상 을 되 돌려 주면 < 1 > 은 (1) Iterable 인 터 페 이 스 를 계승 할 수 있 습 니 다.public class SequenceList<T> implements Iterable
< 2 > iterator 재 작성 방법
public Iterator iterator() {
return new SIterator();
}
이 돌아 올 때 SIterator 대상 은 아래 에 내부 클래스 를 만들어 서 이 루어 집 니 다.
< 3 > 내부 클래스 SIteratour 를 만 들 고 Iterator 가 처음 만 들 었 을 때 이 를 계승 합 니 다.
private class SIteratour implements Iterator{
@Override
public boolean hasNext() {
return false;
}
@Override
public Object next() {
return null;
}
}
우 리 는 cusor 지침 을 만 들 고 처음부터 모든 요 소 를 가리 키 며 구조 방법 에서 0 으로 초기 화 해 야 합 니 다. 첫 번 째 부터 시작 합 니 다.
private class SIterator implements Iterator{
private int cusor;
public SIterator(){
this.cusor=0;
}
@Override
public boolean hasNext() {
return cusor<N;
}
@Override
public Object next() {
return eles[cusor++];
}
}
전체 코드 는 다음 과 같다.
package linear;
import java.util.Iterator;
// ,
public class SequenceList<T> implements Iterable {
//
private T[] eles;
//
private int N;
//
public SequenceList(int capacity) {
//
this.eles = (T[]) new Object[capacity];
//
this.N = 0;
}
//
public void clear() {
this.N = 0;
}
//
public boolean isEmpty() {
return N == 0;
}
//
public int length() {
return N;
}
//
public T get(int i) {
return eles[i];
}
// t
public void insert(T t) {
if (N == eles.length) {
resize(2 * eles.length);
}
eles[N++] = t;
}
// i t
public void insert(int i, T t) {
if (N == eles.length) {
resize(2 * eles.length);
}
// i
for (int index = N; index > i; index--) {
eles[index] = eles[index - 1];
}
// t i
eles[i] = t;
N++;
}
// i ,
public T remove(int i) {
// i
T current = eles[i];
// i
for (int index = i; index < N - 1; index++) {
eles[index] = eles[index + 1];
}
//
N--;
if (N < eles.length / 4) {
resize(eles.length / 2);
}
return current;
}
// t
public int indexof(T t) {
for (int i = 0; i < N; i++) {
if (eles[i].equals(t)) {
return i;
}
}
return -1;
}
// newSize, eles ,
public void resize(int newSize) {
// ,
T[] temp = eles;
//
eles = (T[]) new Object[newSize];
//
for (int i = 0; i < N; i++) {
eles[i] = temp[i];
}
}
@Override
public Iterator iterator() {
return new SIterator();
}
private class SIterator implements Iterator {
private int cusor;
public SIterator() {
this.cusor = 0;
}
@Override
public boolean hasNext() {
return cusor < N;
}
@Override
public Object next() {
return eles[cusor++];
}
}
}
테스트 코드
package test;
import linear.SequenceList;
public class SequenceListTest {
public static void main(String[] args) {
//
SequenceList<String> s1 = new SequenceList<>(10);
//
s1.insert(" ");
s1.insert(" ");
s1.insert(" ");
s1.insert(1,"linlin");
for (Object o : s1) {
System.out.println(o);
}
System.out.println("===========");
//
String getResult = s1.get(1);
System.out.println(" 1 "+getResult);
//
String removeResult= s1.remove(0);
System.out.println(" "+removeResult);
//
s1.clear();
System.out.println(" "+s1.length());
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 범 형 실현 의 양 방향 링크데이터 구조 링크 에 대한 상세 한 설명 은 이동 하 십시오. 링크 및 관련 함수 구현 자바 가 실현 하 는 일반 양 방향 링크 는 참고 할 수 있 습 니 다. 자바 가 실현 한 양 방향 링크 링크 일반적인 도입 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.