Java数组|数组的声明创建和使用
目录
- 一.数组的定义
- 二.数组的基本特点
- 三.数组的声明创建
- 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数组|数组的声明创建和使用相关推荐
- java new数组_Java如何使用new创建数组
java语言使用new操作符来创建数组,语法如下: arrayRefVar = new dataType[arraySize]; 上面的语法语句做了两件事: 一.使用dataType[arraySiz ...
- java中 数组声明,java数组声明格式
java 声明动态数组,java对象数组详解,java中声明数组,java数组声明格式 Java 中数组的声明一维数组的声明: 在 Java 中,数组是独立的对象,有自身的方法,不是变量的集合. 数组 ...
- java new数组_Java创建数组的几种方式
1.一维数组的声明方式: type[] arrayName; 或 type arrayName[]; 附:推荐使用第一种格式,因为第一种格式具有更好的可读性,表示type[]是一种引用类型(数组)而不 ...
- java创建数组的方式_Java创建数组的几种方式总结
1.一维数组的声明方式: type[] arrayName; 或 type arrayName[]; 附:推荐使用第一种格式,因为第一种格式具有更好的可读性,表示type[]是一种引用类型(数组)而不 ...
- java 中数组的创建与使用
java中针对数组的创建 在java程序中必须声明数组变量,才能在程序中使用数组 创建数组的两种方式: 方式一:静态初始化创建+赋值 int[] a={1,2,3,4} 类似 int[] number ...
- java对象类型数组赋值_java声明对象数组
java如何对象创建数组并初始化 急夜影驱动编程小编今天和大家分享答案 /** * 功能:声明一个学生类 * @author qqliweng * 时间:2009-10-22 * 版本:V1.0 */ ...
- java数组及Arrays创建一个int 类型数组 数组元素由键盘录入,每次打印插入排序的结果(数组扩容,数组排序,键盘录入)
@author silence丶你的名字 java数组及Arrays创建一个int 类型数组 数组元素由键盘录入,每次打印插入排序的结果 初始数组元素1 for死循环 获取用户录入的数据,如果为952 ...
- java 中数组的创建 数组遍历 以及数组的输出(打印)
什么是数组? 如果我们需要创建一个 int 类型变量,那么我们只需要 int a; 如果我们需要创建五个 int 类型变量,那么我们只需要int a1; int a2; int a3; int a4; ...
- int java 声明_怎样用java定义一个int数组 C++ 怎么声明一个整型数组?
导航:网站首页 > 怎样用java定义一个int数组 C++ 怎么声明一个整型数组? 怎样用java定义一个int数组 C++ 怎么声明一个整型数组? 相关问题: 匿名网友: int[] anA ...
最新文章
- 【小白学习PyTorch教程】七、基于乳腺癌数据集​​构建Logistic 二分类模型
- HDU - 4738 Caocao's Bridges(边双缩点)
- C/C++学习之路: 模板和异常
- 全国计算机等级考试题库二级C操作题100套(第85套)
- 笔记:seafile 7.x 安装和部署摘要
- 火车票售票系统mysql_2021年元旦火车票今日开售!具体开售时间是几点?
- 最短Hamilton路径(位运算基本思路)
- JavaScript------表单约束验证DOM方法
- 如何在Github上找到“最受欢迎的存储库”? [关闭]
- iMazing与iTunes 两款iOS设备管理器区别 在备份操作上的对比
- 内存管理-基础知识框架和关键结构体(一)
- 百度人脸识别:即使不用,也要import,否则C调用Python会崩溃
- 播放器html模板,腾讯HTML播放器模板
- CPU位数、操作系统位数、指令集、寄存器位数、机器字长等
- Python中WEB开发(一)
- 洛谷 P4408 逃学的小孩 解题报告
- python辗转相除_Python基于辗转相除法求解最大公约数的方法示例
- 重症医学数据库MIMIC-IV简介
- 华为AP固件升级方法 (适用 4051TN系列AP)
- AMBER:使用Cpptraj计算RMSD 以及使用中遇到的问题