您的位置:首页 > 编程语言 > Java开发

JAVA学习笔记21——多维数组+数组常用方法

2015-01-27 09:24 761 查看
最近在看JAVA教学的视频,觉得老师讲的很好,同时借用源代码还有笔记来撰写本系列博客,记录自己的学习内容,同时也供看到的人学习。

本篇介绍的全部是数组的知识,可能顺序不是太有逻辑性,但是由于是看视频记得,所以就跟着视频里面老师讲的顺序来吧,重新组织臣做不到啊~

首先在之前简单介绍一维数组之后来看一下多维数组,其实在实际的应用中三维以及三维以上的都是很少用到的,所以集中介绍二维的~





二维数组的初始化有静态的和动态的,具体见如下代码:

public class Test01 {
public static void main(String[] args) {
//,静态初始化,对应有内存图
int [][] b = {
{1,2},
{3,4,0,9},
{5,6,7}
};
//动态初始化
int[][]  a = new int[3][];
a[0] = new int[2];
a[1] = new int[4];
a[2] = new int[3];

//默认初始化的时候全都默认是0
a[0][0] = 1;
a[0][1] = 2;
a[1][0] = 3;
a[1][1] = 4;
a[1][2] = 0;
a[1][3] = 9;
a[2][0] = 5;
a[2][1] = 6;
a[2][2] = 7;
System.out.println(a[2][2]);
}
}
内存图:



接下来做一个矩阵相加的运算:

/**
* 封装了矩阵常用的算法
*/
public class Matrix {
/**
* 打印指定的矩阵
* @param c
*/
public static void print(int[][] c){
//打印矩阵
for(int i=0;i<c.length;i++){
for(int j=0;j<c.length;j++){
System.out.print(c[i][j]+"\t");
}
System.out.println();     //外层循环里面加一个换行符
}
}
/**
* 矩阵加法
* @param a
* @param b
* @return
*/
public static int[][]  add(int[][] a,int[][] b){
int[][] c = new int[a.length][a.length];   //注意这里的定义
for(int i=0;i<c.length;i++){
for(int j=0;j<c.length;j++){
c[i][j] = a[i][j]+b[i][j];
}
}
return c;
}
public static void main(String[] args) {
int[][]  a = {
{1,3,3},
{2,4,7},
{6,4,9}
};
int[][]  b = {
{3,3,3},
{2,4,7},
{1,4,9}
};
int[][] c = add(a, b);   //把这两个方法封装起来,可重用性就很高了,如果遇到三个二位数组同时相加等类似情况,overload一个就好了。
print(c);
}
}
然后看一下数组拷贝的方法:arraycopy,它来自System类,先来介绍System类:
System
类包含一些有用的类字段和方法。它不能被实例化。在
System
类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。

public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)

参数列表: src - 源数组。 srcPos - 源数组中的起始位置。 dest - 目标数组。 destPos - 目标数据中的起始位置。 length - 要复制的数组元素的数量。

简介(来自JDK文档):从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。从src 引用的源数组到 dest 引用的目标数组,数组组件的一个子序列被复制下来。被复制的组件的编号等于
length 参数。源数组中位置在 srcPos 到 srcPos+length-1 之间的组件被分别复制到目标数组中的 destPos 到 destPos+length-1 位置。如果参数 src 和 dest 引用相同的数组对象,则复制的执行过程就好像首先将 srcPos 到 srcPos+length-1 位置的组件复制到一个带有 length 组件的临时数组,然后再将此临时数组的内容复制到目标数组的
destPos 到 destPos+length-1 位置一样。 If 如果dest 为 null,则抛出 NullPointerException 异常。 如果 src 为 null, 则抛出 NullPointerException 异常,并且不会修改目标数组。

数组的二分查找:public static int
binarySearch(char[] a,char key);参数列表:
a - 要搜索的数组 ;key - 要搜索的值

数组的冒泡排序算法代码实现:

public class maopaopaixu {
void suanfazhixing(int[] a){
for(int i=0;i<a.length-1;i++){//i控制外层轮数,第i轮内层比较length-i次
for(int j=0;j<a.length-1-i;j++){//内层
if(a[j]>a[j+1]){
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
System.out.println(Arrays.toString(a));
}
}
数组的遍历就没有必要调用现成的方法来写了,直接使用for循环即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐