Java个人学习心得之数组Array篇

数组在Java中的内存方式:

栈:

  • 存放基本变量类型(会包含这个基本类型的具体数值)
理解:

就是int,float,double,等等都是在栈里面创建变量和存数据的。

  • 引用对象的变量(会存放这个引用在堆里面的具体地址)
理解:

假如new了一个对象**“int[] array = new int[10]”那么array这个引用地址就是存在栈里面的,而这个array相当于一个引用里面数据和对象的地址**。

堆:

  • 存放new的对象和数组
  • 可以被所有的线程共享,不会存放别的对象引用

理解(栈和堆):

类似数组和类都是在栈里面创建对象名的引用地址,但是开辟空间,存数据的地方是在堆里面,要是用数据就要通过栈的array这个引用地址,调用存在堆的对象名和数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iPThU1Pz-1586702559570)(C:\Users\Administrator\Desktop\2020-03-29_144325.png)]

方法区:

  • 可以被所有的线程共享
  • 包含了所有的class和static变量

数组基本特点:

  • 长度是确定的,数组一旦被创建,他的大小就是不可以改变的
  • 其元素必须是相同类型,不允许出现混合类型
  • 数组中的元素可以是任何数据类型,包括基本和引用类型
  • 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量
  • 数组本身就是对象,Java中对象都是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

报错类型:

ArrayIndexOutOfBounds:数组下标超出边界

数组中的For-Each循环:

**缺点:**里面的下标是取不到的

**快捷键:**数组名.for

语法:

int[] num = new int[]{1,2,3,4,5,6,7,8,9,};

for (int i : num) {
    System.out.println(i);
}

结果:

1,2,3,4,5,6,7,8,9,

多维数组:

多维数组可以看成是数组的数组,比如二维数组就是一个特殊的

二维数组,其实每一个元素都是一个一维数组。

二维数组:

语法:

      int a[][] = new int[][]{{1,2},{2,3},{3,4}};

解析:

上面的二维数组,三个{}前面的1,2,3分别的a数组的第一个数组的元素,三个{}后面的2,3,4分别的a数组的第二个数组的元素(就是说在一维数组的每个元素上再开辟一个数组)

Arrays类:

在使用的时候可以直接使用类名Arrays进行调用,可以通过使用对象来调用

Arrays.fill()
//给数组赋值(填充效果)
 int[] a =new int[10];
 Arrays.fill(a,1);
 System.out.println(Arrays.toString(a));

结果:

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

Arrays.sort()
//给数组排序(升序):
 int[] a =new int[]{10,9,8,7,2,4,5,1,3,6};
 Arrays.sort(a);
 System.out.println(Arrays.toString(a));

结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Arrays.equals()
//比较数组(比较数组中的元素是否相等):
int[] a =new int[]{10,9};//与b数组的元素有一个不相同,就是false
int[] b =new int[]{10,8};
boolean c= Arrays.equals(a,b);
System.out.println(c);

结果:

false

Arrays.binarySearch()
//查找数组元素(对排序好的数组进行二分查找法操作):
int[] a =new int[]{11,12,13,14,151,180};
System.out.println(Arrays.binarySearch(a,180));

结果:

5

要输出时,使用**Arrays.toString(a)**来换成字符串形式输出

冒泡排序:

一轮轮的进行两两比较,如果前面的比后面的大,就会交换位置,如果相同和前面的比后面的小,就不换位置。

public static void main(String[] args) {
    int[] a = new int[]{2,5,1,55,23,45,88,95,8,47,25};
   //  sort(a);
    System.out.println(Arrays.toString(sort(a)));
}

public static int[] sort(int[] a){
    /**
     * 1.比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置
     * 2.每一次比较都会产生出一个最大的,或者最小的数字
     * 3.下一轮则可以少一次排序
     * 4.依次循环,直到知道结束
     */
    int temp = 0;
    //外层循环,判断需要循环的次数
    for (int i = 0; i < a.length-1; i++) {
        //内层循环,判断比较两个数,因为没判断一次就会出一个结果,所以
        //j<a.length-1-i
        for (int j = 0; j <a.length-1-i; j++) {
            if (a[j]>a[j+1]){
                 temp= a[j];
                 a[j] = a[j+1];
                 a[j+1] =temp;
             }
        }
    }
    return a;
}

稀疏数组:

if (a[j]>a[j+1]){
temp= a[j];
a[j] = a[j+1];
a[j+1] =temp;
}
}
}
return a;
}


### 稀疏数组:

  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值