数组学习总结

注意:数组变量名中存储的是数组在内存中的地址,数组是引用类型。

两种数组定义时的特点个场景有什么区别

当前已经知道存入的元素值,用静态初始化

等前该不清楚要存入那些数据,用动态初始化

元素默认值规则:

基本类型 boolean false

引用类型 null

在Java 中的标签语句是放在迭代语句前面的;label: break 是结束多层循环,而continue 是让多层迭代变成死循环的。

数组内存图

数组使用常见问题

1.数组索引越界异常

2.空指针异常 (当数组名指向空地址时,访问相关内容是爆出错误)

当数组传值时要注意,数组是否有元素或者null ,这样会爆出空指针异常,这个和直接数组遍历是一样的,都是数组的局限性。

数组的拷贝是什么意思?

需要创建新数组,把原来数组的元素赋值过来。

数组的最后一个元素是 数组名.length -1 .

//增强循环,读取数组中的所有元素
for (int number : a) {
            System.out.println(number);
        }

Arrays这个类是一个工具类,多用于数组元素的排序问题,都是现成的可以直接使用。

方法名称说明
boolean equals(array1,array2)比较**array1和array2两个数组是否相等**
sort(array)对数组**array的元素进行升序排列**
String toString(array)将一个数组**array转换成一个字符串**
void fill(array,val)把数组**array所有元素都赋值为val**
copyOf(array,length)把数组**array复制成一个长度为length的新数组,返回类型与复制的数组一致**
int binarySearch(array, val)查询元素值**val在数组array中的下标(要求数组中元素已经按升序排列)**
 //equals() 在这个Arrays工具类中是比较地址,两数组地址是不一样的
        // 数组长度和数组元素都一样才是两个数组相等,这才是两个数组相等的关键
        boolean b = Arrays.equals(age, number);
        System.out.println("\n"+ b);
        //将整形数组转换位字符数组
        String string = Arrays.toString(age);
        System.out.println(string);
        //这字符串是从[]开始算下标的
        char charAt = string.charAt(3);
        System.out.println(charAt);
        //将指定的数组都赋值到数组中
        Arrays.fill(number,age.length);
        for (int i = 0; i < number.length; i++) {
            System.out.print(number[i] + "  ");
        }
        System.out.println("\n------------------------------");
        //将一个数组赋值到一个全新的数组中
        int[] copy = Arrays.copyOf(age, age.length);
        for (int i = 0; i < copy.length; i++) {
            System.out.print(copy[i] + " ");
        }
        //没有找到这数就返回一个负数
        Arrays.sort(age);
        int index = Arrays.binarySearch(age, age.length);
        System.out.println(index);

数组正序和逆序的交换算法有三种

/* 取中间数,有几次循环次数,奇偶条件都是一样的,循环次数是固定 */
// 奇数 取一半  列如七  3        0  1  2    3     4  5  6  正好循环三次,交换三次
// 偶数  取一半  列如八   4      0  1   2  3   4   5  6  7  交换四次
 // 不管是偶数还是奇数都没有等于这个情况,等于的话就多交换一次
for (int i = 0,j=age.length -1; i < age.length / 2; i++,j--) {
            temper = age[i];
            age[i] = age[j];
            age[j] = temper;
        }
/*  主要考虑前后索引交换的次数  */ 
// 0   和  最后的最表比较  主要还是要看 判断条件
 // i 是小数  j 是大数  i < j 的时候循环开始,i>J 的时候循环结束
 // 0    7  循环条件一般都是取反,结束循环变成进入循环这么想就可以了
        for (int i = 0, j = age.length - 1; i < j; i++, j--) { 
            temper = age[i];
            age[i] = age[j];
            age[j] = temper;
        }
/*  两个数组,将一个数组赋值到另一个数组中 */
int[] age = {12, 34, 45, 56, 60, 71, 84, 99};
        int[] temper = new int[age.length];
        System.out.println("原来的数据:");
        for (int i = 0; i < age.length; i++) {
            System.out.print(age[i] + "  ");
        }
        System.out.println("\n交换后的数据:");
        for (int i = 0, j = age.length - 1; i < age.length; i++ ,j--) {
            temper[j] = age[i];
        }
        for (int i = 0; i < temper.length; i++) {
            System.out.print(temper[i] + "  ");
        }

给数组插入一个元素

   /*      先要把要插入的数据的下标遍历到,
         * 然后进入循环,以这个下标未结束条件
         * 让这个元素后面的元素两两交换,前提是数组必须有足够的空间
         * 循环条件按结束循环的条件取反就行了
   * */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值