数组
数组
创建数组
-
声明数组:
int[] a
或者int a[]
均可声明数组;[] 表示该变量是一个数组,int 表示数组里的每一个元素都是一个整数,a 是变量名 -
创建数组:创建数组时要指明数组长度,
new int[5]
public class HelloWorld {
public static void main(String[] args) {
//声明一个引用
int[] a;
//创建一个长度是5的数组,并且使用引用a指向该数组
a = new int[5];
int[] b = new int[5]; //声明的同时,指向一个数组
}
}
初始化数组
前面都只是给数组分配空间,并没有进行赋值,下例将数组进行赋值操作:
- 分配空间与赋值分步
public class HelloWorld {
public static void main(String[] args) {
int[] a = new int[5]; //分配了长度是5的数组,但是没有赋值
//没有赋值,那么就会使用默认值
//作为int类型的数组,默认值是0
System.out.println(a[0]);
//进行赋值
a[0] = 100;
a[1] = 101;
a[2] = 103;
a[3] = 120;
a[4] = 140;
}
}
- 分配空间与赋值同步
public class HelloWorld {
public static void main(String[] args) {
//写法一: 分配空间同时赋值
int[] a = new int[]{100,102,444,836,3236};
//写法二: 省略了new int[],效果一样
int[] b = {100,102,444,836,3236};
//写法三:同时分配空间,和指定内容
//在这个例子里,长度是3,内容是5个,产生矛盾了
//所以如果指定了数组的内容,就不能同时设置数组的长度
int[] c = new int[3]{100,102,444,836,3236};
}
}
选择法与冒泡法排序
-
选择法排序的思路:
- 把第一位和其他所有的进行比较,只要比第一位小的,就换到第一个位置来
比较完后,第一位就是最小的; - 然后再从第二位和剩余的其他所有进行比较,只要比第二位小,就换到第二个位置来
比较完后,第二位就是第二小的。
- 把第一位和其他所有的进行比较,只要比第一位小的,就换到第一个位置来
-
冒泡法排序的思路:
-
从第一位开始,把相邻两位进行比较,如果发现前面的比后面的大,就把大的数据交换在后面,循环比较完毕后,最后一位就是最大的;
-
再来一次,只不过不用比较最后一位,以此类推。
-
-
例子:创建一个长度是5的数组,并填充随机数。首先用选择法正排序,然后再对其使用冒泡法倒排序
public class sort{
//创建一个长度是5的数组,并填充随机数。
//首先用选择法正排序,然后再对其使用冒泡法倒排序
public static void main(String[] args){
int []a = new int[5];
System.out.println("未排序数组为:");
for (int i = 0; i <= a.length - 1; i++){
a[i] = (int)(Math.random()*100);//对数组赋值随机数
System.out.print(a[i]+" ");
}
//选择法排序
//把第一位和其他所有的进行比较,只要比第一位大的,就换到第一个位置来 ,依次类推
System.out.println("\n" + "选择法排序后:");
for (int i = 0; i < a.length - 1; i++){
for (int j = i+1; j < a.length; j++){
if (a[i] < a[j]){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
for (int i = 0; i <= a.length-1; i++){
System.out.print(a[i] + " ");
}
//冒泡法排序
//从第一位开始,把相邻两位进行比较,如果发现前面的比后面的大,就把大的数据交换在后面,
//循环比较完毕后,最后一位就是最大的 ,依此类推,只不过不用比较最后一位
System.out.println("\n" + "冒泡法排序后:");
for (int i = 0; i < a.length; i++){
for (int j = 0; j < a.length-i-1; j++){
if (a[j] > a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for (int i = 0; i <= a.length-1; i++){
System.out.print(a[i] + " ");
}
// 增强型for循环可遍历数组
// for (int i : a)
// System.out.print(i + " ");
}
}
二维数组
public class HelloWorld {
public static void main(String[] args) {
//初始化二维数组,
int[][] a = new int[2][3]; //有两个一维数组,每个一维数组的长度是3
a[1][2] = 5; //可以直接访问一维数组,因为已经分配了空间
//只分配了二维数组
int[][] b = new int[2][]; //有两个一维数组,每个一维数组的长度暂未分配
b[0] =new int[3]; //必须事先分配长度,才可以访问
b[0][2] = 5;
//指定内容的同时,分配空间
int[][] c = new int[][]{
{1,2,4},
{4,5},
{6,7,8,9}
};
}
}
Arrays
- 数组复制:
Arrays.copyOfRange
方法进行数组复制。copyOfRange
只需要源数组就就可以了,通过返回值,就能够得到目标数组了。除此之外,需要注意的是copyOfRange
的第3个参数,表示源数组的结束位置,是取不到的。 - 转为字符串:
Arrays.toString
,直接把一个数组,转换为字符串,这样方便观察数组的内容。 - 排序:
Arrays.sort
可直接排序。 - 搜索:
Arrays.binarySearch
可查找元素所在位置,使用binarySearch
之前,必须先使用sort
进行排序,且如果数组中有多个相同的元素,查找结果是不确定的。 - 判断是否相同:
Arrays.equals
。 - 填充:
Arrays.fill
可使用同一个值,填充整个数组 。
import java.util.Arrays;
public class arrays {
public static void main(String[] args) {
int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
int b[] = new int[] { 18, 62, 68, 82, 65, 8 };
// copyOfRange(int[] original, int from, int to)
// 第一个参数表示源数组
// 第二个参数表示开始位置(取得到)
// 第三个参数表示结束位置(取不到)
int[] c = Arrays.copyOfRange(a, 0, 3);
System.out.println(Arrays.toString(c));//输出[18, 62, 68]
//排序
System.out.println("排序之前 :");
System.out.println(Arrays.toString(a));
Arrays.sort(a);
System.out.println("排序之后:");
System.out.println(Arrays.toString(a));
//搜索
System.out.println("68出现的位置是:" + Arrays.binarySearch(a, 68));
//判断
System.out.println(Arrays.equals(a, b));
//填充
int d[] = new int[10];
Arrays.fill(d, 5);//数组c全填充为5
System.out.println(Arrays.toString(d));
}
}