目录
-
一维数组初始化的两种方法
int[] arr = new int[5];// 动态初始化
int[] arr1 = new int[] { 1, 2, 3 };// 静态初始化
System.out.println(arr[4]);
// 数组一旦初始化,长度就是确定的
-
二维数组初始化的两种方式
// 动态初始化
// int[][] a = new int[3][4];
// int[][] a1 = new int[5][];
// 静态初始化
int[][] a2 = new int[][] { { 1, 2, 3 }, { 2, 3 }, { 4, 5 } };
数组的常用方法:
import java.util.Arrays;
public class ArrayTest2 {
public static void main(String[] args) {
int[] arr1=new int[]{12,324,35,123,436,464,231};
int[] arr2=new int[]{1,2,3,4,5,6,7};
//判断两个数组是否相等 boolean equals(int[] a,int[ b])
System.out.println(arr1.equals(arr2));
//输出数组信息String toString(int[] a)
System.out.println(Arrays.toString(arr1));
//将指定值填充到数组之中void fill(int[] a,int val)
Arrays.fill(arr2,10);
System.out.println(Arrays.toString(arr2));
//对数组进行排序void sort(int[] a);
Arrays.sort(arr1);
System.out.println(Arrays.toString(arr1));
//对排序后的数组进行二分法检索int binarySearch(int[] a,int key)
int index=Arrays.binarySearch(arr1, 123);
if(index>=0){
System.out.println(index);
}else{
System.out.println("没找到");
}
}
}
简单练习
-
数组的遍历
for (int i = 0; i < a2.length; i++) {
for (int j = 0; j < a2[i].length; j++) {
System.out.println(a2[i][j]);
}
}
-
二维数组中所有元素的和
for (int i = 0; i < a2.length; i++) {
int n = 0;
for (int j = 0; j < a2[i].length; j++) {
n += a2[i][j];
}
System.out.println(n);
}
-
杨辉三角
// 元素关系:yanghu[i][j]=yanghu[i-1][j-1]+yanghu[i-1][j]
int yanghu[][] = new int[10][];
for (int i = 0; i < yanghu.length; i++) {
yanghu[i]=new int[i+1];
//给首尾赋值
yanghu[i][0] = 1;
yanghu[i][i] = 1;
for (int j = 1; j < yanghu[i].length-1; j++) {
yanghu[i][j] = yanghu[i - 1][j - 1] + yanghu[i - 1][j];
}
}
for (int i = 0; i < yanghu.length; i++) {
for (int j = 0; j < yanghu[i].length; j++) {
System.out.print(yanghu[i][j]+"\t");
}
System.out.println(" ");
}
-
不重复的随机赋值
Random r=new Random();
int[] ra=new int[6];
int index=0;
while(index<ra.length){
int n=r.nextInt(30);
//定义一个比较方法对比随机数是否重复
if(contains(ra,index,n)){
ra[index]=n;
index++;
}
}
for (int i = 0; i < ra.length; i++) {
System.out.print(ra[i]+"\t");
}
public static boolean contains(int[] ra,int index,int n) {
for (int i =index-1; i >=0; i--) {
if(n==ra[i]){
return false;
}
}
return true;
}
-
随机十个数,求最大值,最小值,平均数
int[] w=new int[10];
for (int i = 0; i < w.length; i++) {
w[i]=r.nextInt(90)+10;
System.out.print(w[i]+"\t");
}
for (int i = 0; i < w.length-1; i++) {
if(w[i]>w[i+1]){
int temp=w[i];
w[i]=w[i+1];
w[i+1]=temp;
}
}
System.out.println("Max="+w[9]);
System.out.println("Min="+w[0]);
double sum=0;
for (int i = 0; i < w.length; i++) {
sum+=w[i];
}
System.out.println(sum);
double avg=sum/10;
System.out.println(avg);
-
数组的真假复制
int[] array1,array2;
array1=new int[]{2,3,5,7,11,13,17,19};
for (int i = 0; i < array1.length; i++) {
System.out.print(array1[i]+"\t");
}
System.out.println(" ");
array2=array1;
for (int i = 0; i < array2.length; i++) {
if(i%2==0){
array2[i]=i;
}
}
//打印array1
for (int i = 0; i < array1.length; i++) {
System.out.print(array1[i]+"\t");
}
System.out.println(" ");
//打印array2
for (int i = 0; i < array2.length; i++) {
System.out.print(array2[i]+"\t");
}
System.out.println(" ");
//结论:数组中的元素在堆内存中只有一份,直接赋值的是堆内存中的地址
//真正数组值的复制
array2=new int[array1.length];
for (int i = 0; i < array1.length; i++) {
array2[i]=array1[i];
}
-
数组的反转
for (int i = 0; i < (array2.length+1)/2; i++) {
int temp=array2[i];
array2[i]=array2[array2.length-i-1];
array2[array2.length-i-1]=temp;
}
for (int i = 0; i < array2.length; i++) {
System.out.print(array2[i]+"\t");
}
System.out.println(" ");
-
查找
\\线性查找:一个一个找
int b=2;
boolean f=false;
for (int i = 0; i < array2.length; i++) {
if(array2[i]==b){
System.out.println(i);
f=true;
}
if(f=false){
System.out.println("没找到");
}
\\二分法查找:折半查找(适用于有序序列)
int[] a = new int[] { 1, 3, 6, 9, 56, 67, 78, 89, 91 };
int num = 90;
int head = 0;// 首索引
int end = a.length - 1;// 末索引
boolean flag1 = true;// 判断是否找到该数字
while (head <= end) {
int middle = (head + end) / 2;// 找到中心位置
if (num == a[middle]) {
System.out.println("找到指定元素的索引位置:" + middle);
flag1 = false;
break;
} else if (num < a[middle]) {
end = middle - 1;// 将尾巴移到中心继续查找
} else if (num > a[middle]) {
head = middle + 1;// 将头部移到中间继续查找
}
}
if (flag1) {
System.out.println("没有找到该数字");
}
-
排序算法
- 将一个序列按一定顺序重新排序
- 排序的目的:快速查找
- 排序算法的优劣:高效率,低存储,稳定
\\冒泡排序:重复比较相邻元素
int[] no=new int[]{13,4,6,42,324,234,4,325,535,323};
for (int i = 0; i < no.length-1; i++) {//每i轮都能确定一个最大数
for (int j = 0; j < no.length-i-1; j++) {
if(no[j]>no[j+1]){
int temp=no[j];
no[j]=no[j+1];
no[j+1]=temp;
}
}
}
for (int i = 0; i < no.length; i++) {
System.out.print(no[i]+"\t");
}
System.out.println(" ");
\\快速排序
public class QuickSort {
private static void swap(int[] data, int i, int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
private static void subSort(int[] data, int start, int end) {
if (start < end) {
int base = data[start];
int low = start;
int high = end + 1;
while (true) {
while (low < end && data[++low] - base <= 0)
;
while (high > start && data[--high] - base >= 0)
;
if (low < high) {
swap(data, low, high);
} else {
break;
}
}
swap(data, start, high);
subSort(data, start, high - 1);//递归调用
subSort(data, high + 1, end);
}
}
public static void quickSort(int[] data){
subSort(data,0,data.length-1);
}
public static void main(String[] args) {
int[] data = { 9, -16, 30, 23, -30, -49, 25, 21, 30 };
System.out.println("排序之前:\n" + java.util.Arrays.toString(data));
quickSort(data);
System.out.println("排序之后:\n" + java.util.Arrays.toString(data));
}
}