1.创建出数组的原型
这是一个基本的数组,里面有简单的三个方法
public class Array {
private int[] data;
private int size;
public Array(int capacity) {
data = new int[capacity];
size=0;
}
public Array() {
this(10);
}
//查看数组内有几个元素
public int getSize(){
return size;
}
//查看数组是否为空
public boolean isEmpty(){
return size ==0;
}
//查看数组长度
public int getCapaCity(){
return data.length;
}
}
向数组中添加元素
思考:当我们在最后一位添加元素的时候,应该如何编写方法?
答案:
//最后一位添加元素
public void addList(int number){
if (size == data.length ){
throw new IllegalArgumentException("超出范围");
}
data[size] = number;
size++;
}
思考:当我们想在指定位置添加元素时,应该如何编写方法?
答案:
//在指定位置添加方法
public void addIndex(int index,int number){
if (size == data.length ){
throw new IllegalArgumentException("数组超出范围");
}
if (index<0 || index>size ){
throw new IllegalArgumentException("index超出范围");
}
for (int i = size-1;i>= index;i--){
data[i+1]=data[i];
}
data[index]=number;
size++;
}
在数组中查询和修改元素
思考:我们在查看数组元素的时候无法直接使用System.out.println()打印出来,因此我们需要重写toString方法
答案
@Override
public String toString() {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(String.format("size=%d,capacity=%d\n",size,data.length));
stringBuffer.append("[");
for (int i=0;i<size;i++){
stringBuffer.append(data[i]);
if (i!=size-1){
stringBuffer.append(",");
}
}
stringBuffer.append("]");
return stringBuffer.toString();
}
下面我们来测试一下我们编写的数组如何
public static void main(String[] args) {
Array array = new Array(20);
for (int i = 0; i <10 ; i++) {
array.addList(i);
}
System.out.println(array);
}
打印出来的结果为
证明我们编写的代码成功了。
这里我们也可以取出单一的元素
int get(int index){
if (index<0 || index>=size){
throw new IllegalArgumentException("index超出范围");
}
return data[index];
}
这里我们也可以修改单一的元素
void set(int index,int number){
if (index<0 || index>=size){
throw new IllegalArgumentException("index超出范围");
}
data[index]=number;
}
数组中的包含、搜索和删除元素
有时候我们需要查询某个元素是否存在,因此我们可以编写一个方法。
//查看是否包含某个元素
public boolean contains(int number){
for (int i = 0; i <size ; i++) {
if (data[i]==number){
return true;
}
}
return false;
}
我们不仅查询某个元素是否存在,还要查询此元素的下标,因此我们可以
//查看是否包含某个元素的下标
public int find(int number){
for (int i = 0; i <size ; i++) {
if (data[i]==number){
return i;
}
}
return -1;
}
我们如何从数组中删除元素
思考:当我们删除一个元素时,数组会发生什么变化?此变化和添加数元素有什么样的区别?
我们可以模拟一下,先创建一个长度为6的数组,现在我们要删除里面的元素3,可以使用覆盖的方式,让后一位覆盖前一位
代码演示
public void delete(int index){
if (size <0 ||size == data.length ){
throw new IllegalArgumentException("数组超出范围");
}
if (index<0 || index>size ){
throw new IllegalArgumentException("index超出范围");
}
for (int i=index+1;i<size;i++){
data[i-1]=data[i];
}
size--;
}
数组中使用泛型
现在为我们的数组变成泛型吧
public class Array<E> {
private E[] data;
private int size;
public Array(int capacity) {
data = (E[])new Object[capacity];
size=0;
}
....
//因方法太多,省略下面的方法
}
动态数组
在之前我们的数组是固定长度的,但有很多时候我们创建数组的时候是不知道创建的长度,因此我们要把数组变为动态数组
具体实现步骤:
1、创建一个新数组
2、用循环的方式把旧数组的元素复制到新数组上
3、返回新数组
具体实现代码
//生成动态数组
private void resize(int newCapacity) {
//1、创建一个新数组
E[] newData = (E[])new Object[newCapacity];
//2、用循环的方式把旧数组的元素复制到新数组上
for (int i = 0; i <size ; i++) {
newData[i]= data[i];
}
//3、返回新数组
data=newData;
}