JavaSE基础(3)——数组

1.数组——引用数据类型

  • 存储相同数据类型有序的元素序列
  • 先声明,再使用
  • 三要素:元素,长度、索引
  • 分类:
    • 一维数组
    • 多维数组
  • 数组的特点:元素类型统一长度不可变连续存储索引访问多维支持
int[] arr = new int[]{1, 2, 3, 4, 5};    //主要形式
int arr1[] = new int[]{1, 2, 3, 4, 5};

2.数组初始化

  • 静态初始化:
String[] strArr = {"张三","李四","王二麻"};
  • 动态初始化:

byte、short、int、long类型数组:每个元素的初始值为 0。

float、double类型数组:每个元素的初始值为 0.0。

char类型数组:每个元素的初始值为 \u0000(Unicode 表示的空字符)。

boolean类型数组:每个元素的初始值为 false

int[] price = new int[4];   //仅指定数组长度,系统自动赋默认值

3.数组遍历

  • 数组下标:【0 ~ length-1】,注意避免发生数组越界
int [] ages = {12, 18, 9, 33, 45, 60};
for(int i = 0; i < ages.length; i++){ //ages.length是获取数组的长度
    System.out.println("数组中第"+(i+1)+"个元素是 "+ages[i]); 
}
// 增强for 循环 全遍历
for(int age :ages){
    System.out.println(age);
}

4.数组引用赋值

  • 将一个数组的值赋值给另一个数组
int [] a1 = {1,2,3};
int [] a2;
a2 = a1;
a1[0]=10;  //a1={10,2,3}

5.数组快速排序

c={1,2,8,45,89,3,4,6,9,30,66,100};
 // 对数组c进行排序,以便后续输出
Arrays.sort(c);  
// 输出排序后的数组 c={1,2,3,6,8,9,30,45,66,89,100};
System.out.println(Arrays.toString(c));    //将数组以字符串形式输出

6.数组反转

//方法使用了Collections.reverse方法来反转数组它通过将数组转换为列表,
//然后调用reverse方法来实现反转操作由于这个过程内部处理了所有的细节,
public static void reverse(int[] array) {
    Collections.reverse(Arrays.asList(array));
}

7.内存模型

Java主要将内存分为 两部分

  • 栈:存储基本数据类型,有序,先进(压栈)出(弹栈)
  • 堆:存储引用数据类型,无序,在堆中寻找内容需要引用(“地址”)长时间不引用内容,GC会回收

8.算法

计算机解决问题的方式方法、步骤

程序 = 数据结构(数据存储方式) + 算法(处理数据的方式)

衡量算法好坏:时间复杂度、空间复杂度

  • 时间复杂度

9.排序

直接选择排序
  • 定义一个n个元素的数组,交换数组中的元素,将最大的元素放在最后(第)一个位置
int[] arr = {0,8,12,1,2,3};//小---》大
//直接选择排序--------------找到最大值对应的索引,再与第一位或最后一位交互位置
int[] arr = {0,8,12,1,2,3};
for(int i=0;i<arr.length-1;i++){//一共这样的事情需要比较多少次
    //找到当前未排序的数组中元素的最大值所在的索引
    int index_max = 0;
    for(int j=0;j<arr.length-i;j++){
        if(arr[j]>arr[index_max]){
            index_max = j;
        }
    }
    //元素交互
    int temp = arr[arr.length-i-1];
    arr[arr.length-i-1] = arr[index_max];
    arr[index_max] = temp;
    System.out.println("======>"+Arrays.toString(arr));
}
冒泡排序
  • 将数组中的元素分成2部分,已排好的与未排好的部分,两两相邻依次进行比较和交互。
import java.util.Arrays;
public class Demo03 {
    public static void main(String[] args) {
        //冒泡排序
        int[] arr = {0,8,12,1,2,3};
        for(int i=0;i<arr.length-1;i++){//一共这样的事情需要比较多少次
            boolean b =true;//已经排好
            for(int j=0;j<arr.length-i-1;j++){
                if(arr[j]>arr[j+1]){
                    //没排好
                    //元素交互
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                    b=false;
                }
            }
            if(b){
                break;
            }
            System.out.println("======>"+Arrays.toString(arr));
        }
    }
}

10.二维数组

“一维数组中的元素是一个一维数组”、“数组的嵌套”

int arr1[][]={{1,2,3},{4,5,6},{7,8,9}};
int s=0;   //累和
for (int i = 0; i < arr1.length; i++){
    for (int j = 0; j < arr1[i].length; j++){
        if (i == j||j==2-i)
                s += arr1[i][j];
        }
    }
System.out.println(s);    //输出 1+3+5+7+9 = 25
  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值