目录

  • 一.数组的定义
  • 二.数组的基本特点
  • 三.数组的声明创建
    • 1.声明数组变量
    • 2.创建数组
    • 3.内存分析
  • 四.数组初始化
    • 1.静态初始化
    • 2.动态初始化
    • 3.默认初始化
  • 五.多维数组
  • 六.Arrays类
  • 七.常见排序算法
    • 1.冒泡排序
    • 2.选择排序

一.数组的定义

  • 数组是相同类型数据的有序集合。
  • 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
  • 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。

二.数组的基本特点

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

三.数组的声明创建

1.声明数组变量

dataType[] arrayRefVar;   // 首选的方法
或
dataType arrayRefVar[];  // 效果相同,但不是首选方法

2.创建数组

arrayRefVar = new dataType[arraySize];
  • 使用 dataType[arraySize] 创建了一个数组
  • 把新创建的数组的引用赋值给变量 arrayRefVar
或者 dataType[] arrayRefVar = {value0, value1, ..., valuek};

3.内存分析

  • Java内存

    • 堆 存放new的对象和数组,可以被所有线程共享,不会存放别的对象引用。
    • 栈 存放基本变量类型(会包含这个基本类型的具体数值)。

    ​ 引用对象的变量(会存放这个引用在堆里面的具体地址)。

    • 方法区 可以被所有的线程共享,包含了所有的class和static变量。

  • 声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。因此,声明数组时不能指定其长度(数组中元素的个数),例如: int arr[5]; //非法。
  • 声明一个数组的时候并没有数组被真正的创建。
  • 构造一个数组,必须指定长度。

四.数组初始化

class Person{private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public Person(String name) {this.name = name;}
}

1.静态初始化

  • 除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。
int[] a = {1,2,3};
Person[] persons = {new Person("张三"),new Person("李四")};

2.动态初始化

  • 数组定义、为数组元素分配空间、赋值的操作、分开进行。
Person[] person=null;
person=new Person[2];
person[0]=new Person("张三");
person[1]=new Person("李四");
for (int i=0;i<person.length;i++){System.out.println(person[i].getName());
}

3.默认初始化

  • 数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

五.多维数组

  • 多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。
  • arr.length获取的二维数组第一维数组的长度,arr[0].length才是获取二维第一个数组长度。
type[][] typeName = new type[typeLength1][typeLength2] //多维数组格式
//比如
int arr[][] = new int[2][3];//二维数组arr可以看成一个两行三列的数组

六.Arrays类

//binarySearch
int[] numbers={1, 2, 3, 4};
System.out.println(Arrays.binarySearch(numbers,6));//输出-(插入点) 即-5
System.out.println(Arrays.binarySearch(numbers,2));//输出1
//equals
int[] numbers2={1,2,3,4};
System.out.println(Arrays.equals(numbers,numbers2));//输出true
//tostring
System.out.println(Arrays.toString(numbers));//输出[1, 2, 3, 4]
//fill
Arrays.fill(numbers,1,3,100);
System.out.println(Arrays.toString(numbers));//输出[1, 100, 100, 4]
//sort
int[] numbers3=numbers;
Arrays.sort(numbers3);
System.out.println(Arrays.toString(numbers3));//输出[1, 4, 100, 100]

七.常见排序算法

1.冒泡排序

public class BubbleSort {/*** N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数。* @param args*/public static void main(String[] args) {int arr[] = {26,15,29,66,99,88,36,77,111,1,6,8,8};for(int i=0;i < arr.length-1;i++) {//外层循环控制排序趟数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;}}System.out.print("第"+(i+1)+"次排序结果:");//列举每次排序的数据System.out.println(Arrays.toString(arr));}System.out.println("最终排序结果:"+Arrays.toString(arr));}
}
/*输出结果:第1次排序结果:[15, 26, 29, 66, 88, 36, 77, 99, 1, 6, 8, 8, 111]第2次排序结果:[15, 26, 29, 66, 36, 77, 88, 1, 6, 8, 8, 99, 111]第3次排序结果:[15, 26, 29, 36, 66, 77, 1, 6, 8, 8, 88, 99, 111]第4次排序结果:[15, 26, 29, 36, 66, 1, 6, 8, 8, 77, 88, 99, 111]第5次排序结果:[15, 26, 29, 36, 1, 6, 8, 8, 66, 77, 88, 99, 111]第6次排序结果:[15, 26, 29, 1, 6, 8, 8, 36, 66, 77, 88, 99, 111]第7次排序结果:[15, 26, 1, 6, 8, 8, 29, 36, 66, 77, 88, 99, 111]第8次排序结果:[15, 1, 6, 8, 8, 26, 29, 36, 66, 77, 88, 99, 111]第9次排序结果:[1, 6, 8, 8, 15, 26, 29, 36, 66, 77, 88, 99, 111]第10次排序结果:[1, 6, 8, 8, 15, 26, 29, 36, 66, 77, 88, 99, 111]第11次排序结果:[1, 6, 8, 8, 15, 26, 29, 36, 66, 77, 88, 99, 111]第12次排序结果:[1, 6, 8, 8, 15, 26, 29, 36, 66, 77, 88, 99, 111]最终排序结果:[1, 6, 8, 8, 15, 26, 29, 36, 66, 77, 88, 99, 111]
*/

2.选择排序

public class JavaArray{public int[] sort(int arr[]) {int temp = 0;for (int i = 0; i < arr.length - 1; i++) {// 认为目前的数就是最小的, 记录最小数的下标int minIndex = i;for (int j = i + 1; j < arr.length; j++) {if (arr[minIndex] > arr[j]) {// 修改最小值的下标minIndex = j;}}// 当退出for就找到这次的最小值,就需要交换位置了if (i != minIndex) {//交换当前值和找到的最小值的位置temp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}}return arr;}public static void main(String[] args) {JavaArray javaArray=new JavaArray();int[] array = {2, 5, 1, 4, 8, 0, 7};int[] sort = javaArray.sort(array);for (int num : sort) {System.out.print(num + "\t");}}
}//输出0  1   2   4   5   7   8

Java数组|数组的声明创建和使用相关推荐

  1. java new数组_Java如何使用new创建数组

    java语言使用new操作符来创建数组,语法如下: arrayRefVar = new dataType[arraySize]; 上面的语法语句做了两件事: 一.使用dataType[arraySiz ...

  2. java中 数组声明,java数组声明格式

    java 声明动态数组,java对象数组详解,java中声明数组,java数组声明格式 Java 中数组的声明一维数组的声明: 在 Java 中,数组是独立的对象,有自身的方法,不是变量的集合. 数组 ...

  3. java new数组_Java创建数组的几种方式

    1.一维数组的声明方式: type[] arrayName; 或 type arrayName[]; 附:推荐使用第一种格式,因为第一种格式具有更好的可读性,表示type[]是一种引用类型(数组)而不 ...

  4. java创建数组的方式_Java创建数组的几种方式总结

    1.一维数组的声明方式: type[] arrayName; 或 type arrayName[]; 附:推荐使用第一种格式,因为第一种格式具有更好的可读性,表示type[]是一种引用类型(数组)而不 ...

  5. java 中数组的创建与使用

    java中针对数组的创建 在java程序中必须声明数组变量,才能在程序中使用数组 创建数组的两种方式: 方式一:静态初始化创建+赋值 int[] a={1,2,3,4} 类似 int[] number ...

  6. java对象类型数组赋值_java声明对象数组

    java如何对象创建数组并初始化 急夜影驱动编程小编今天和大家分享答案 /** * 功能:声明一个学生类 * @author qqliweng * 时间:2009-10-22 * 版本:V1.0 */ ...

  7. java数组及Arrays创建一个int 类型数组 数组元素由键盘录入,每次打印插入排序的结果(数组扩容,数组排序,键盘录入)

    @author silence丶你的名字 java数组及Arrays创建一个int 类型数组 数组元素由键盘录入,每次打印插入排序的结果 初始数组元素1 for死循环 获取用户录入的数据,如果为952 ...

  8. java 中数组的创建 数组遍历 以及数组的输出(打印)

    什么是数组? 如果我们需要创建一个 int 类型变量,那么我们只需要 int a; 如果我们需要创建五个 int 类型变量,那么我们只需要int a1; int a2; int a3; int a4; ...

  9. int java 声明_怎样用java定义一个int数组 C++ 怎么声明一个整型数组?

    导航:网站首页 > 怎样用java定义一个int数组 C++ 怎么声明一个整型数组? 怎样用java定义一个int数组 C++ 怎么声明一个整型数组? 相关问题: 匿名网友: int[] anA ...

最新文章

  1. 【小白学习PyTorch教程】七、基于乳腺癌数据集​​构建Logistic 二分类模型
  2. HDU - 4738 Caocao's Bridges(边双缩点)
  3. C/C++学习之路: 模板和异常
  4. 全国计算机等级考试题库二级C操作题100套(第85套)
  5. 笔记:seafile 7.x 安装和部署摘要
  6. 火车票售票系统mysql_2021年元旦火车票今日开售!具体开售时间是几点?
  7. 最短Hamilton路径(位运算基本思路)
  8. JavaScript------表单约束验证DOM方法
  9. 如何在Github上找到“最受欢迎的存储库”? [关闭]
  10. iMazing与iTunes 两款iOS设备管理器区别 在备份操作上的对比
  11. 内存管理-基础知识框架和关键结构体(一)
  12. 百度人脸识别:即使不用,也要import,否则C调用Python会崩溃
  13. 播放器html模板,腾讯HTML播放器模板
  14. CPU位数、操作系统位数、指令集、寄存器位数、机器字长等
  15. Python中WEB开发(一)
  16. 洛谷 P4408 逃学的小孩 解题报告
  17. python辗转相除_Python基于辗转相除法求解最大公约数的方法示例
  18. 重症医学数据库MIMIC-IV简介
  19. 华为AP固件升级方法 (适用 4051TN系列AP)
  20. AMBER:使用Cpptraj计算RMSD 以及使用中遇到的问题

热门文章

  1. 安卓框架之二维码框架zxing的快速上手
  2. oracle 全列添加删除补充日志
  3. fiddler4如何只抓取指定浏览器的包
  4. iOS证书签名原理分析
  5. 五十、头文件和源文件的区别和规范(extern)
  6. Qt——QLineEdit使用总结
  7. AI - 什么是假设检验?
  8. MySQL Longtext字段优化记录(一)
  9. 励志!专科“逆袭”读浙大硕士,3篇SCI,最终成清华博士!
  10. 猿玖科技程序员-猿勇强