콘텐츠
선형 테이블
2. 동적 배열
3. 요소 추가
1. 기본적으로 배열의 끝에 추가
동적 배열 클래스:
package seqlist;
import java.util.Arrays;
/**
动态数组的类:具备增删改查的功能,逻辑结构对外不可见。用户只知道该功能
*/
public class MyArray {
//封装的数组
private int[] data;
//表示动态数组中元素的个数;
private int size;
//如果没有传参,默认开辟大小为是10的数组
public MyArray(){
this(10);
}
public MyArray(int initCap){
this.data = new int[initCap];
}
public void add(int val){
data[size] = val;
size++;
//元素在添加过程中,元素已经填满数组
if (size == data.length){
grow();
}
}
/**
*
*/
private void grow(){
this.data = Arrays.copyOf(data,size*2);
}
@Override
public String toString() {
return "MyArray{" +
"data=" + Arrays.toString(data) +
'}';
}
}
테스트 클래스:
public class Test {
public static void main(String[] args) {
MyArray myArray = new MyArray(3);
myArray.add(10);
myArray.add(20);
myArray.add(30);
myArray.add(40);
System.out.println(myArray.toString());
}
}
테스트 결과: 초기화된 배열 정의의 길이는 3입니다. 추가된 요소가 배열의 길이보다 클 경우 배열의 길이는 자신의 2배로 확장됩니다.
2. 지정된 위치에 인덱스 추가
public void add(int val,int index){
//先判断index是否非法,index可以等于size,就相当于在数组的尾部插入,index = 0在头部插入
if (index < 0 || index > size){
System.err.println("index is ");
}
for (int i = size -1;i >= index ;i--){
data[i+1] = data[i];
}
data[index] = val;
size++;
//元素在添加过程中,元素已经填满数组
if (size == data.length){
grow();
}
}
4. 삭제
1. 첫 번째 요소 삭제
public int daleteFrist(){
return delete(0);
}
public int deleteLast(){
return delete(size - 1);
}
2. 버튼을 눌러 삭제
public int delete(int index){
if (index < 0 || index > size){
System.err.println("下标违法");
return -1;
}
int temp = data[index];
for (int i = index; i < size - 1; i++) {
data[i] = data[i+1];
}
size-- ;
return temp;
}
3. 값으로 삭제
public int deleteVal(int val){
int i = searchByVal(val);
if (i != -1){
int delete = delete(i);
return delete;
}
return -1;
}
public int[] deleteAllVal(int val){
MyArray myArray1 = new MyArray(1);
for (int i = 0; i < size; i++) {
if (data[i] == val){
myArray1.add(data[i]);
delete(i);
}
}
return myArray1.data;
}
5. 수정
public int updateByIndex(int index,int val){
if (index < 0 || index > size){
System.err.println("下标违法");
return -1;
}
int oldVal = data[index];
data[index] = val;
return oldVal;
}
public boolean updateByVal(int oldVal,int val){
int i = searchByVal(oldVal);
if (i != -1){
data[i] = val;
return true;
}
return false;
}
6. 문의
public int searchByIndex(int index){
if (index < 0 || index > data.length - 1){
System.err.println("下标违法");
return -1;
}
return data[index];
}
public int searchByVal(int val){
for (int i = 0; i < size-1; i++) {
if (data[i] == val){
return i;
}
}
return -1;
}
public boolean hasContainVal(int val){
int i = searchByVal(val);
if (i != -1){
return true;
}
return false;
}