javase基础知识总结-数组

一维数组

  1. 定义 引用类型定义都用new
    int[] a=new int[10];
  2. 初始化
    静态初始化 int[] a={1,2,3,4,5};
    动态初始化 int[] a= new int[5];
  3. 长度属性 length
  4. 遍历方法 for(String name : s)//name为变量名
  5. 内存结构 栈中只储存基本数据类型和引用名;堆中储存引用类型

二维数组

  • 不常用,一般用作游戏地图坐标。
  • java本质上没有二维数组,所谓的二维数组就是一个元素类型为数组的一维数组。
  • 初始化:
    int[] [] a = new int[3] [];
    int[] [] a = new int[3] [5];
    int[] [] a = {{1},{2,3,},{4,5,6}};
  • 遍历
public class lianxi {

	public static void main(String[] args) {
		//二维数组的初始化1
		/*int[][] a=new int[3][5];
		a[0][0]=1;
		a[1][1]=1;
		a[2][2]=1;*/
		//二维数组的初始化2
		int[][] a= new int[3][];
		a[0]=new int[] {1,2,3};
		a[1]=new int[] {4,5,6,7,8};
		a[2]=new int[] {9,0,1,2};
		//二维数组的初始化3
		//int[][] a={{1,2,3},{4,5,6,7,8},{9,0,1,2}}
		//二维数组的遍历1
		/*for(int i=0;i<a.length;i++) {
			for(int j=0;j<a[i].length;j++) {
				System.out.print(a[i][j]+"\t");
			}
			System.out.println();
		}*/
		//二维数组的遍历2 foreach
		for(int[] a1:a) {
			for(int a2:a1) {
				System.out.print(a2+"\t");
			}
			System.out.println();
		}
	}
}

最后要说一点,数组的大小定义了就无法改变,写插入和删除算法时候想了好久,最后还是写不出来。只能定义时候就把要加入元素的位数预留出来。


虽然表面上不可以改变,但学习了面向对象之后,我自己写了一个数组增删改查的类,嘿嘿。

//我这个取名叫做啰里八嗦的数组操作类

public class MyArray {

	//数组
	int[] array;
	//当前数组中元素的个数
	int size;
	
	
	public MyArray(int[] array) {
		this.array = array;
		this.size=array.length;
	}
	//在数组最后添加一个value
	public void add(int value) {
		int[] b=new int[size+1];
		for(int j=0;j<size;j++) {
			b[j]=array[j];
		}
		b[size]=value;
		array=b;
		size++;
	}
	//根据index删除一个元素
	void remove(int index) {
		for(int i=index;i<size-1;i++) {
			array[i]=array[i+1];
		}
		array[size-1]=0;
		size--;
	}
	
	//在数组position处添加一个value
	void add(int position,int value) {
		int[] c=new int[size+1];
		for(int i=0;i<size;i++) {
			c[i]=array[i];
		}
	    for(int i=size;i>position;i--) {
	    	c[i]=c[i-1];
	    }
	    c[position]=value;
	    array=c;
	    size++;
	}
	//把position处的值改成value
	void set(int position,int value) {
		array[position]=value;
	}
	//根据索引获取值
	int getValue(int index) {
		return array[index];
	}
	//获取数组长度
	int getSize() {
		return size;
	}
}

自己写的肯定是最香的,后来看了别人写的,主要从两点优化:
1.把数组扩长功能单独拿出来写一个方法,我自己确实重复写了两次,这里考虑不足。扩容的大小要好好选择,太长浪费空间,太短没有效果,别人选择的是原长度的1.5倍+1。
2.要有各种判断的语句。比如索引值要大于0且小于数组长度之类的。
于是就有了下面的修改版。

//重大调整
public class MyArray2 {
	int[] array=new int[10];
	int size=0;
	
	public void add(int a) {
		extendSpace();
		array[size++]=a;
	}
	//扩容
	private void extendSpace() {
		if(size==array.length) {
			int[] arraytwo=new int[size*3/2+1];
			for(int i=0;i<array.length;i++) {
				arraytwo[i]=array[i];
				array=arraytwo;
		    }		
		}		
	}
	
	public boolean remove(int index) {
		if(index>0 && index<size) {
			for(int i=index;i<size;i++) {
				array[i]=array[i+1];
			}
			size--;
		}
		return false;
	}
	
	public int getSize() {
		return this.size;
	}
	
	public int get(int index) {
		if(index>0 && index<size) {
			return array[index];
		}else {
			return Integer.MAX_VALUE;
		}
	}
	public void set(int index,int value) {
		if(index>=0 && index<size) {
			array[index]=value;
		}
	}
	public void add(int index,int a) {
		extendSpace();
		for(int i=size-1;i>=index;i--) {
			array[i+1]=array[i];
		}
		this.set(index, a);
		size++;
	}
}

记录一下与数组有关的常用API

System.arraycopy() 数组复制
Arrays.toString() 数组输出
Arrays.sort() 数组排序
还有一个和字符串有关的
字符串类本身储存的就是字符数组
字符串.equals();判断二者是否相等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值