目录
定义一个数组
增
在头部插入
在尾部插入
根据索引插入
给数组扩容
测试
删
删除头部元素
删除尾部元素
根据索引删除元素
测试
改
根据索引修改,返回修改前的元素值
测试
查
根据元素值查询
根据索引查询
根据元素值查找对应的索引下标
测试
toString()方法输出
全部代码
定义一个数组
public class MyArray {
//数组存储元素
private int[] data;
//当前数组实际存储的元素个数
private int size;
public MyArray(int capacity){
data = new int[capacity];
}
}
增
在头部插入
public void addFirst(int val){
if (size == data.length){
grow();
}
for (int i = size-1; i >= 0 ; i--) {
data[i+1] = data[i];
}
data[0] = val;
size++;
}
在尾部插入
public void addLast(int val){
//先要判断数组是否满
if(size == data.length){
grow();
}
data[size] = val;
size++;
}
根据索引插入
public void addIndex(int index,int val) {
if (size == data.length) {
grow();
}
if (index < 0 || index > size) {
System.err.println("插入错误!");
return;
}
if (index == 0) {
addFirst(val);
return;//如果没有return的话,会插入两次
}
if (index == size) {
addLast(val);
} else {
for (int i = size - 1; i >= index; i--) {
data[i + 1] = data[i];
}
data[index] = val;
size++;
}
}
给数组扩容
private void grow(){
int[] newData = Arrays.copyOf(this.data,this.data.length << 1);
this.data =newData;
}
测试
public class Test {
public static void main(String[] args) {
MyArray myArray = new MyArray(3);
myArray.addLast(1);
myArray.addLast(3);
myArray.addLast(5);
myArray.addLast(7);
//[1,3,5,7]
System.out.println(myArray);
myArray.addFirst(10);
//[10,1,3,5,7]
System.out.println(myArray);
myArray.addIndex(3,8);
myArray.addIndex(0,9);
myArray.addIndex(6,33);
//[9,10,1,3,8,5,33,7]
System.out.println(myArray);
}
}
删
删除头部元素
public void removeFirst(){
for (int i = 0; i <= size-1 ; i++) {
data[i] = data[i+1];
}
size--;
}
删除尾部元素
public void removeLast(){
removeIndex(size-1);
}
根据索引删除元素
public void removeIndex(int index){
if(index < 0 || index >= size){
System.out.println("索引非法!");
return;
}
for (int i = index; i < size ; i++) {
data[i] = data[i+1];
}
size--;
}
测试
public class Test {
public static void main(String[] args) {
MyArray myArray = new MyArray(3);
myArray.addLast(1);
myArray.addLast(3);
myArray.addLast(5);
myArray.addLast(7);
//[1,3,5,7]
System.out.println(myArray);
myArray.addFirst(10);
//[10,1,3,5,7]
System.out.println(myArray);
myArray.addIndex(3,8);
myArray.addIndex(0,9);
myArray.addIndex(6,33);
//[9,10,1,3,8,5,33,7]
System.out.println(myArray);
myArray.removeIndex(0);
myArray.removeIndex(2);
myArray.removeIndex(5);
//[10,1,8,5,33]
System.out.println(myArray);
myArray.removeFirst();
myArray.removeLast();
//[1,8,5]
System.out.println(myArray);
}
}
改
根据索引修改,返回修改前的元素值
public int set(int index,int newVal){
if(index < 0 || index > size-1){
System.out.println("索引非法!");
return -1;
}
int oldVal = data[index];
data[index] = newVal;
return oldVal;
}
测试
public class Test {
public static void main(String[] args) {
MyArray myArray = new MyArray(3);
myArray.addLast(1);
myArray.addLast(3);
myArray.addLast(5);
myArray.addLast(7);
//[1,3,5,7]
System.out.println(myArray);
myArray.addFirst(10);
//[10,1,3,5,7]
System.out.println(myArray);
myArray.addIndex(3,8);
myArray.addIndex(0,9);
myArray.addIndex(6,33);
//[9,10,1,3,8,5,33,7]
System.out.println(myArray);
myArray.removeIndex(0);
myArray.removeIndex(2);
myArray.removeIndex(5);
//[10,1,8,5,33]
System.out.println(myArray);
myArray.removeFirst();
myArray.removeLast();
//[1,8,5]
System.out.println(myArray);
myArray.set(0,3);
myArray.set(1,6);
myArray.set(2,8);
//[3,6,8]
System.out.println(myArray);
}
}
查
根据元素值查询
public boolean contains(int val){
int index =getByVal(val);
if(index == -1){
return false;
}
return true;
}
根据索引查询
public int getVal(int index){
if(index < 0 || index > size-1){
System.out.println("索引非法!");
}
return data[index];
}
根据元素值查找对应的索引下标
public int getByVal(int val){
for (int i = 0; i < size; i++) {
if (data[i] == val){
return i;
}
}
System.out.println("该元素不存在!");
return -1;//该元素不存在
}
测试
public class Test {
public static void main(String[] args) {
MyArray myArray = new MyArray(3);
myArray.addLast(1);
myArray.addLast(3);
myArray.addLast(5);
myArray.addLast(7);
//[1,3,5,7]
System.out.println(myArray);
myArray.addFirst(10);
//[10,1,3,5,7]
System.out.println(myArray);
myArray.addIndex(3,8);
myArray.addIndex(0,9);
myArray.addIndex(6,33);
//[9,10,1,3,8,5,33,7]
System.out.println(myArray);
myArray.removeIndex(0);
myArray.removeIndex(2);
myArray.removeIndex(5);
//[10,1,8,5,33]
System.out.println(myArray);
myArray.removeFirst();
myArray.removeLast();
//[1,8,5]
System.out.println(myArray);
myArray.set(0,3);
myArray.set(1,6);
myArray.set(2,8);
//[3,6,8]
System.out.println(myArray);
//false
//8
//0
System.out.println(myArray.contains(2));
System.out.println(myArray.getVal(2));
System.out.println(myArray.getByVal(3));
}
}
toString()方法输出
public String toString() {
String ret = "[";
for (int i = 0; i < size; i++) {
ret += data[i];
if (i != size - 1) {
ret += ",";
}
}
ret += "]";
return ret;
}
全部代码
import java.util.Arrays;
public class MyArray {
//数组存储元素
private int[] data;
//当前数组实际存储的元素个数
private int size;
public MyArray(int capacity){
data = new int[capacity];
}
public void addFirst(int val){
if (size == data.length){
grow();
}
for (int i = size-1; i >= 0 ; i--) {
data[i+1] = data[i];
}
data[0] = val;
size++;
}
public void addIndex(int index,int val) {
if (size == data.length) {
grow();
}
if (index < 0 || index > size) {
System.err.println("插入错误!");
return;
}
if (index == 0) {
addFirst(val);
return;//如果没有return的话,会插入两次
}
if (index == size) {
addLast(val);
} else {
for (int i = size - 1; i >= index; i--) {
data[i + 1] = data[i];
}
data[index] = val;
size++;
}
}
public void addLast(int val){
//先要判断数组是否满
if(size == data.length){
grow();
}
data[size] = val;
size++;
}
public void removeFirst(){
for (int i = 0; i <= size-1 ; i++) {
data[i] = data[i+1];
}
size--;
}
public void removeLast(){
removeIndex(size-1);
}
public void removeIndex(int index){
if(index < 0 || index >= size){
System.out.println("索引非法!");
return;
}
for (int i = index; i < size ; i++) {
data[i] = data[i+1];
}
size--;
data[size] = 0;
}
public int set(int index,int newVal){
if(index < 0 || index > size-1){
System.out.println("索引非法!");
return -1;
}
int oldVal = data[index];
data[index] = newVal;
return oldVal;
}
public int getByVal(int val){
for (int i = 0; i < size; i++) {
if (data[i] == val){
return i;
}
}
return -1;//该元素不存在
}
public boolean contains(int val){
int index =getByVal(val);//
if(index == -1){
return false;
}
return true;
}
public int getVal(int index){
if(index < 0 || index > size-1){
System.out.println("索引非法!");
}
return data[index];
}
public String toString() {
String ret = "[";
for (int i = 0; i < size; i++) {
ret += data[i];
if (i != size - 1) {
ret += ",";
}
}
ret += "]";
return ret;
}
private void grow(){
int[] newData = Arrays.copyOf(this.data,this.data.length << 1);
this.data =newData;
}
}
import java.util.Arrays;
public class MyArray {
//数组存储元素
private int[] data;
//当前数组实际存储的元素个数
private int size;
public MyArray(int capacity){
data = new int[capacity];
}
public void addFirst(int val){
if (size == data.length){
grow();
}
for (int i = size-1; i >= 0 ; i--) {
data[i+1] = data[i];
}
data[0] = val;
size++;
}
public void addIndex(int index,int val) {
if (size == data.length) {
grow();
}
if (index < 0 || index > size) {
System.err.println("插入错误!");
return;
}
if (index == 0) {
addFirst(val);
return;//如果没有return的话,会插入两次
}
if (index == size) {
addLast(val);
} else {
for (int i = size - 1; i >= index; i--) {
data[i + 1] = data[i];
}
data[index] = val;
size++;
}
}
public void addLast(int val){
//先要判断数组是否满
if(size == data.length){
grow();
}
data[size] = val;
size++;
}
public void removeFirst(){
for (int i = 0; i <= size-1 ; i++) {
data[i] = data[i+1];
}
size--;
}
public void removeLast(){
removeIndex(size-1);
}
public void removeIndex(int index){
if(index < 0 || index >= size){
System.out.println("索引非法!");
return;
}
for (int i = index; i < size ; i++) {
data[i] = data[i+1];
}
size--;
data[size] = 0;
}
public int set(int index,int newVal){
if(index < 0 || index > size-1){
System.out.println("索引非法!");
return -1;
}
int oldVal = data[index];
data[index] = newVal;
return oldVal;
}
public int getByVal(int val){
for (int i = 0; i < size; i++) {
if (data[i] == val){
return i;
}
}
return -1;//该元素不存在
}
public boolean contains(int val){
int index =getByVal(val);//
if(index == -1){
return false;
}
return true;
}
public int getVal(int index){
if(index < 0 || index > size-1){
System.out.println("索引非法!");
}
return data[index];
}
public String toString() {
String ret = "[";
for (int i = 0; i < size; i++) {
ret += data[i];
if (i != size - 1) {
ret += ",";
}
}
ret += "]";
return ret;
}
private void grow(){
int[] newData = Arrays.copyOf(this.data,this.data.length << 1);
this.data =newData;
}
}



