Java学习之数组

1. 程序=数据结构+算法
  算法:解决问题的流程、步骤--顺序、分支、循环
  数据结构:将数据按照某种特定的结构来保存
  要怎么存?
  设计合理的数据结构会有好的算法
  数组就是最基本的一种数据结构
2. 数组
  1)相同数据类型元素的集合
  2)数据是一种数据类型(引用类型)

int a;//声明整型变量a
int[] a;//声明整型数组变量a

//声明一个整型数组a,包含5个元素
//每个元素都是整型,默认值为0
int[] a = new int[5]; //0,0,0,0,0

//声明浮点型数组b,包含10个元素
//每个元素都是浮点型,默认值为true
double[] b = new double[10];

3)数组的定义:
int[] arr = new int[4];
4)数组的初始化
int[] arr1 = new int[3]; //0,0,0
//只能声明的同时用{}赋值
int[] arr2 = {0,0,0}; //0,0,0
int[] arr3 = new int[]{1,4,7}; //1,4,7
5)数组的访问
5.1)通过数组名.length来获取数组的长度
int[] arr = new int[3];
System.out.println(arr.length); //3
5.2)通过下标/索引来访问数组中的元素
下标从0开始,最大到arr.length-1
int[] arr = new int[3];
arr[0] = 100;
arr[1] = 200;
arr[2] = 300;
arr[3] = 400; //数组下标越界异常

arr[arr.length-1] = 800; //给最后一个元素赋值
System.out.println(arr[arr.length-1]); //打印最后一个元素
6)数组的遍历
int[] arr = new int[300];
arr[0] = 100;
arr[1] = 100;
arr[2] = 100;
arr[3] = 100;
arr[4] = 100;
...
arr[299] = 100;

//数组赋值
for(int i=0;i<arr.length;i++) {
    arr[i] = 100;
}
//数组的输出
for(int i=0;i<arr.length;i++) {
    System.out.println(arr[i]);
}
for(int a : arr) {
    System.out.println(a);
}
//循环当中的问题
for
(/*1*/;/*2*/i<=100;/*3*/i++) { /*4*/ sum +=i; } /* * 循环执行顺序 * 124 324 324 324 */
3. 找最大数的算法
1). 假设第一个元素为最大值
int max = arr[0];
2). 遍历剩余元素
for(int i=1;i<arr.length;i++) {
if(max<arr[i]) {
max = arr[i];
}
}
4. 数组的复制
int[] a = {10,20,30,40,50};
int[] b = new int[6];
//a:源数组
//0:源数组的起始下标
//b:目标数组
//0:目标数组的起始下标
//5:赋值元素的个数
System.copy(a,0,b,0,5);
//a:源数组
//a1:目标数组
//6:目标数组的长度
int[] a1 = Arrays.copyof(a, 6);
5. 数组的排序
Arrays.sort(arr); //升序
冒泡算法---原理:
1)四个数冒三轮
2)每一轮都是从第一个元素开始冒
每一次都是和它的下一个元素比
3)冒出来的就不再参与比较
int arr[] = {56,8,23,1};
for(int i=0;i<arr.length-1;i++) { //控制轮数
for(int j=0;j<arr.length-1-i;j++) { //控制每轮的次数
if(arr[j]>arr[j+1]) {
int t = arr[j];
arr[j] = arr[j+1];
arr[j+1] = t;
}
}
}
第一轮:
56和8比,换,8,56,23,1
56和23比,换,8,23,56,1
56和1比,换,8,23,1,56-------56冒出来了
第二轮:
2和23比,不换
23和1比,换,8,1,23,56-------23冒出来了
第三轮:
2和1比,换,1,8,23,56--------8冒出来了
public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = new int[10];
        for(int i=0;i<arr.length;i++) {
            arr[i] = (int)(Math.random()*100);
        }
        System.out.println("原数组为:");
        for(int i=0;i<arr.length;i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        //冒泡排序
        for(int i=0;i<arr.length-1;i++) { //控制轮数
            for(int j=0;j<arr.length-1-i;j++) { //控制比较次数
                if(arr[j]>arr[j+1]) {
                    int t = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = t;
                }
            }
        }
        System.out.println("排序后的数组为:");
        for(int i=0;i<arr.length;i++) {
            System.out.print(arr[i]+" ");
        }
    }
}


原文地址:https://www.cnblogs.com/guodong-wang/p/6932002.html