자바 사용자 정의 길이 가 변 배열 작업
그러면 길이 가 변 적 인 배열 을 정의 하면 두 배열 로 배열 의 길이 변 화 를 실현 할 수 있다.데 이 터 를 추가 하거나 삭제 할 때마다 공간 을 다시 개척 하 는 것 을 피하 기 위해 저 는 먼저 원래 의 배열 을 고정 길이 로 설정 하고 배열 이 가득 찼 을 때 한 번 에 일정한 길 이 를 늘 려 공간 을 개척 하 는 시간 을 절약 합 니 다.
배열 의 데이터 형식 이 불확실 하기 때문에 범 형 을 사용 하 는 것 이 좋 습 니 다.
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;
}
}
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.