1.数组的结构特点
数组是内存的一块连续空间
数组可以通过下标进行访问数据
下标:从0开始依次递增
长度:整个数组中可以存储的元素个数
2.一维数组
数组中存储元素为数据元素
定义格式:数组存储的数据类型[]数组名=new数据类型[存储的元素个数]
3.二维数组
一个一维数组存储了多个一维数组
定义格式:数组存储的数据类型[][]数组名=new数据类型[存储的一维数组个数][每个一维数组中存储的元素个数]
4.动态数组
定义一个动态数组实现自动扩容
属性:
*底层存储数据的数组
*已存入的元素个数
*数组的实时长度
方法:
*构造方法:进行初始化
*toString:将数组按数组格式输出
*add:添加元素
*remove:移除指定下标元素
*get:获取指定下标元素
*set:替换传入下标位置元素
代码:
1.创建数组
public class MyArray {
Object[]values;
int length;
int size;
static final int initCap=10;//数组初始长度
//根据默认数组长度进行初始化
public MyArray(){
length=initCap;
values=new Object[length];
size=0;
System.out.println("已创建数组,长度为"+length);
}
//根据给定数组长度进行初始化
public MyArray(int initLength){
if(initLength<2){
System.out.println("输入的初始长度不能小于2,数组会使用默认数组初始长度进行初始化");
length=initCap;
values=new Object[length];
size=0;
}else{
length=initLength;
values=new Object[length];
size=0;
}
System.out.println("已创建数组,长度为"+length);
}
}
public static void main(String[] args) {
MyArray Arr=new MyArray();
MyArray Arr1=new MyArray(5);
MyArray Arr2=new MyArray(1);
}
2.toString()方法实现
public String toString(){
String str="{";
for(int i=0;i<size-1;i++){
str+=values[i]+",";
}
str+=values[size-1]+"}";
return str;
}
public static void main(String[] args) {
MyArray Arr=new MyArray(5);
for(int i=0;i<15;i++){
Arr.add(i);
}
System.out.println(Arr.toString());
}
3.add()方法实现
3.1.数组末尾添加元素
public void add(Object e){
//若数组元素已存满,扩容
if(size==length){
int oldlength=length;
int newlength=oldlength*2;
Object[] newvalues=new Object[newlength];
for(int i=0;i<size;i++){
newvalues[i]=values[i];
}
values=newvalues;
length=newlength;
System.out.println("数组已扩容,扩容后长度为:"+length);
}
values[size]=e;
size++;
}
public static void main(String[] args) {
MyArray Arr=new MyArray(5);
for(int i=0;i<15;i++){
Arr.add(i);
}
}
3.2.指定下标添加元素
public void add(int index,Object e){
if(size==length){
int oldlength=length;
int newlength=oldlength*2;
Object[] newvalues=new Object[newlength];
for(int i=0;i<size;i++){
newvalues[i]=values[i];
}
values=newvalues;
length=newlength;
System.out.println("数组已扩容,扩容后长度为:"+length);
}
for(int i=size;i>index;i--){
values[i]=values[i-1];
}
values[index]=e;
size++;
}
public static void main(String[] args) {
MyArray Arr=new MyArray(5);
for(int i=0;i<15;i++){
Arr.add(i);
}
System.out.println(Arr.toString());
Arr.add(5,100);
System.out.println(Arr.toString());
}
4.remove()方法实现
public Object remove(int index){
if(index>=0&&index<size){
Object oldE=values[index];
for(int i=index;i<size-1;i++){
values[i]=values[i+1];
}
size--;
return oldE;
}
System.out.println("传入下标超出数组范围");
return null;
}
public static void main(String[] args) {
MyArray Arr=new MyArray(5);
for(int i=0;i<15;i++){
Arr.add(i);
}
System.out.println(Arr.toString());
System.out.println(Arr.remove(5));
System.out.println(Arr.remove(20));
System.out.println(Arr.toString());
}
5.get()方法实现
public Object get(int index){
if(index>=0&&index<size){
Object e=values[index];
return e;
}
System.out.println("传入下标超出数组范围");
return null;
}
public static void main(String[] args) {
MyArray Arr=new MyArray(5);
for(int i=0;i<15;i++){
Arr.add(i);
}
System.out.println(Arr.toString());
System.out.println(Arr.get(6));
System.out.println(Arr.get(17));
System.out.println(Arr.toString());
}
6.set()方法实现
public void set(int index,Object e){
if(index>=0&&index<size){
System.out.println(values[index]+"替换为"+e);
values[index]=e;
}else{
System.out.println("传入下标超出数组范围");
}
}
public static void main(String[] args) {
MyArray Arr=new MyArray(5);
for(int i=0;i<15;i++){
Arr.add(i);
}
System.out.println(Arr.toString());
Arr.set(5,100);
System.out.println(Arr.toString());
}