자바 사용자 정의 길이 가 변 배열 작업

7834 단어 Java길이배열
우 리 는 모두 배열 이 선형 이 고 유형 이 고정 되 며 메모리 주소 가 연속 되 고 길 다 는 것 을 알 고 있다.주로 배열 이 정의 되면 그 길이 도 정 해 지고 유한 한 데 이 터 를 추가 할 수 밖 에 없다.길이 가 변 할 수 있 는 배열 은 이 길 이 를 깨 뜨리 고 배열 데이터 의 무한 증 가 를 실현 하 는 것 이다.
그러면 길이 가 변 적 인 배열 을 정의 하면 두 배열 로 배열 의 길이 변 화 를 실현 할 수 있다.데 이 터 를 추가 하거나 삭제 할 때마다 공간 을 다시 개척 하 는 것 을 피하 기 위해 저 는 먼저 원래 의 배열 을 고정 길이 로 설정 하고 배열 이 가득 찼 을 때 한 번 에 일정한 길 이 를 늘 려 공간 을 개척 하 는 시간 을 절약 합 니 다.
배열 의 데이터 형식 이 불확실 하기 때문에 범 형 을 사용 하 는 것 이 좋 습 니 다.

public class MyList<E> {
 private int rongliang;//  
 private int zengliang;//  
 private int num;//  
 
 //       
 //Object        ,        Object 
 private Object[] src;
 
 //         
 public MyList(){
 this(10,10);
 }
 
 public MyList(int rongliang){
 this(rongliang,10);
 }
 
 public MyList(int rongliang,int zengliang){
 this.rongliang = rongliang;
 this.zengliang = zengliang;
 src = new Object[rongliang];
 }
}
MyList 에서 배열 에 데 이 터 를 추가 하 는 것 을 실현 합 니 다.배열 의 데이터 수량 이 배열 의 길이 보다 적 을 때 배열 이 null 인 곳 에 데 이 터 를 직접 추가 할 수 있 습 니 다.그러나 배열 의 수량 이 배열 의 길이 보다 많 을 때 한 배열 을 다시 정의 해 야 합 니 다.길 이 는 원래 배열 의 증 가 량 이 고 그 다음 에 데 이 터 를 추가 해 야 합 니 다.

public void add(E s){
 //          num         (  ),      
 if(num>=src.length){
 //        ,           
 Object arr[] = new Object[src.length+zengliang];
 //      
 System.arraycopy(arr, 0, arr, 0, src.length);
 src = arr;
 }
 //  num        ,     ,    
 //  num        ,       if    ,     
 //  num++
 src[num++] = s;
 }
지정 한 아래 표 시 된 데 이 터 를 꺼 냅 니 다.아래 표 시 된 매개 변수 가 들 어 오기 때문에 배열 의 아래 표 시 는 경 계 를 넘 었 는 지,이상 을 던 졌 는 지 판단 해 야 합 니 다.

public E get(int index){
 //    
 if(index<0 || index>=num){
 throw new IndexOutOfBoundsException("    !index:"+index+",size:"+num);
 }
 //     E  
 return (E)src[index];
 }
지정 한 아래 표 시 된 데 이 터 를 수정 합 니 다.아래 표 시 된 매개 변수 가 들 어 왔 기 때문에 배열 의 아래 표 시 는 경 계 를 넘 었 는 지,이상 을 던 졌 는 지 판단 해 야 합 니 다.

public void modify(int index,E s){
 //    
 if(index<0 || index>=num){
 throw new IndexOutOfBoundsException("    !index:"+index+",size:"+num);
 }
 src[index] = s;
 }
지정 한 아래 표 시 된 데 이 터 를 삭제 합 니 다.배열 의 null 값 의 길이 가 증분 보다 클 때 배열 의 용량 을 줄 이 고 낭 비 를 방지 해 야 합 니 다.

public void delete(int index){
 //    
 if(index<0 || index>=num){
 throw new IndexOutOfBoundsException("    !index:"+index+",size:"+num);
 }
 // >index           
 System.arraycopy(src, index+1, src, index, num-index-1);
 num--;
 //       
 if(src.length-num>=zengliang){
   //        ,              
     Object arr[] = new Object[src.length-zengliang];
   //    
     System.arraycopy(src, 0, arr, 0, num);
   src = arr;
 }
 }
아래 표 시 된 데 이 터 를 지정 한 데이터 로 변경 합 니 다.

public void insert(int index,E s){
 //    
 if(index<0 || index>=num){
 throw new IndexOutOfBoundsException("    !index:"+index+",size:"+num);
 }
 //          num         (  ),      
 if(num>=src.length){
   //        ,           
   Object arr[] = new Object[src.length+zengliang];
   //      
   System.arraycopy(src, 0, arr, 0, src.length);
   src = arr;
 }
 // >index             
 //arraycopy()             
 System.arraycopy(src, index, src, index+1, num-index);
 //    
 src[index] = s;
 num++;
 }
마지막 으로 배열 의 길이 가 아 닌 배열 의 데 이 터 를 가 져 오 는 개 수 를 쓰 십시오.

public int size(){
   return num;
 }
이 길이 가 변 할 수 있 는 배열 이 가능 한 지 테스트 클래스 를 작성 하 십시오.

public class test {
 
 public static void main(String[] args) {
 //    MyList  
 //           
 MyList<String> list = new MyList<String>();
 
 //    
 list.add("a");
 list.add("b");
 list.add("c");
 list.add("d");
 list.add("e");
 list.add("f");
 list.add("g");
 list.add("h");
 list.add("i");
 list.add("j"); 
 
 //    
 for(int i=0;i<list.size();i++){
 String s = list.get(i);
 System.out.print(s+" ");
 }
 
 System.out.println("");
 int n = list.size();
   System.out.println("     :"+n);
 System.out.println("**********************************************");
 
 //         
 list.modify(1, "QQ");
 
 //    
 for(int i=0;i<list.size();i++){
 String s = list.get(i);
 System.out.print(s+" ");
 }
 
 System.out.println("");
 int m = list.size();
 System.out.println("     :"+m);
 System.out.println("**********************************************");
 
 //         
 list.delete(2);
 
 //    
 for(int i=0;i<list.size();i++){
 String s = list.get(i);
 System.out.print(s+" ");
 }
 
 System.out.println("");
   int k = list.size();
   System.out.println("     :"+k);
 System.out.println("**********************************************");
 
 //            
 list.insert(3, "zr");
 list.insert(3, "qi");
 
 //    
 for(int i=0;i<list.size();i++){
 String s = list.get(i);
 System.out.print(s+" ");
 }
 
 System.out.println("");
 int h = list.size();
   System.out.println("     :"+h);
 System.out.println("**********************************************");
 }
 
}
최종 배열 의 결 과 는:

a b c d e f g h i j 
     :10
**********************************************
a QQ c d e f g h i j 
     :10
**********************************************
a QQ d e f g h i j 
     :9
**********************************************
a QQ d qi zr e f g h i j 
     :11
**********************************************
추가:자바 에 사용자 정의 길이 의 배열 을 만 들 고 모든 요 소 를 입력 하 십시오.
지식 포인트 사용:배열,방법,Scanner,for 순환.
작업:

package Array;
import java.util.Scanner;
public class InputArray {
public static void main(String[] args) {
shuzu();//     
 }
 //    
 public static void shuzu() {
 
 //             
 Scanner sz = new Scanner(System.in);
 System.out.println("       :");//      
 int[] cd = new int[sz.nextInt()];//       
 System.out.println("         :"+cd.length);//       
 
 // for          
 for (int i = 0; i < cd.length; i++) {
  int q = i+1;//  q    ,      0   。
  System.out.println("    "+q+"     :");
  cd [i] = sz.nextInt();
  System.out.println(" "+q+"      "+cd[i]+"。"); 
  }
  sz.close();
  
  //            ,    for      
 System.out.print("           :");//      
 for (int i2 = 0; i2 < cd.length; i2++) {  
  if(i2 == cd.length-1) {
  System.out.print(cd[i2]+"。");
  }else {
  System.out.print(cd[i2]+"、");
  }
 }
 return;//    ,rentun;
 }
 
}
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기