Java语言基础语法(二)数组
来源:互联网 发布:江西财经大学软件学院 编辑:程序博客网 时间:2024/05/10 14:54
一、概念
数组的概念:数组就是具有相同属性的数据类型的一组数据的集合,就是一个装有相同数据类型的容器。
数组的好处:更有效的管理和处理数据,方便操作。
二、一维数组
一维数组实际上就是一组形同数据类型的线性集合。
声明一维数组有两种方式:
元素类型[] 数组名= new 元素类型[元素个数或数组长度];
例如:int[] arr=new int[10];//定义一个数组长度为10的数组arr。
元素类型[] 数组名= new 元素类型[]{元素,元素,……};
例如:int[] arr=new int[]{1,2,3,4,5};//定义了一个数组内容为1,2,3,4,5的数组arr。
数组在内存中的结构:
数组实体在堆内存中,都有各自的物理地址值 ,数组变量在栈内存中,实体中变量都有默认初始值。例如 Int[]a=new int[10];中a在栈内存中,int[10]在堆内存中。栈中的a存放的是数组的首地址。当不使用的时候,栈自动清空,堆靠Java虚拟机垃圾回收机制将内容清空。
三、二维数组
二维数组:如果一维数组中的每个元素仍然是一个数组,那么它就是一个二维数组。
二维数组的生命方式与一维数组的生命方式是一样的,
元素类型[][] 数组名= new 元素类型[元素个数或数组长度][元素个数或数组长度];
例如:int[][] arr=new int[2][3];//定义一个二位数组arr包括两个长度为3的一维数组。
元素类型[] 数组名= new 元素类型[]{元素,元素,……};
例如:int[][] arr=new int[][]{{1,2,3},{4,5}};//定义一个二位数组arr包括两个长度为3的一维数组,数组内容分别为1,2,3和4,5,0。这里注意的是 第二组中指定一的两个元素,一共有三个,所以另一位补0 。
二维数组的内存结果与一维数组类似。在此就不介绍了。
四、数组的基本操作
数组的基本操作有遍历数组,填充数组元素,对数组进行排序,复制数组,数组查询。
下面主要说的是数组排序算法:
1、冒泡排序
冒泡排序的基本原理:
对比相邻的元素值,如果满足条件就交换元素值,即交换元素的位置,这样数据就像气泡一样上升到顶部。
冒泡算法实现
public class ArrySort1 {public static void main(String[] args){//定义数组初始值 int[] a = new int[]{22,111,2,3,66,34,7,9,8,77}; //输出原始数组 for(int i=0;i<a.length;i++) System.out.print(a[i]+" "); //冒泡排序 System.out.println(); for(int i=0;i<10;i++) for(int j=0;j<a.length-i-1;j++) //如果前一个比后一个大,交换数据 if(a[j]>a[j+1]){ int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } //输出排序后的数组 for(int i=0;i<a.length;i++) System.out.print(a[i]+" ");}}
运行结果:
2、选择排序
选择排序的原理:
将指定排序位置与其他数组元素分别对比,如果满足条件就交换数据,但是这里交换不是交换的相邻数据,而是把满足条件的元素与指定排序位置交换,这样排序好的的位置越来越多,最后数组都成为已排序好的格式。
选择排序算法的实现
/*对于一个给定的数组进行从小到大排序操作(利用选择排序方法实现) * 思路: * 1、先用0角标上的元素依次与其他元素进行比较,将较小值元素存放到0角标。 * 2、然后再拿1角标上的元素依次进行比较,以此类推。 * */public class ArrySort {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub//定义数组初始值int[] arr=new int[]{22,111,2,3,66,34,7,9,8,77};//显示原始数组show(arr);//数组排序selectSort(arr);//打印排序后的数组show(arr);}private static void selectSort(int[] arr) {// TODO Auto-generated method stub//定义中间变量来存放比较的结果int temp;//外循环,遍历数组for(int i=0;i<arr.length-1;i++)//内循环,比较数组中的数据for(int j=i+1;j<arr.length;j++){if(arr[i]>arr[j]){//交换temp=arr[i];arr[i]=arr[j];arr[j]=temp;}}}//定义输出函数private static void show(int[] arr) {// TODO Auto-generated method stubSystem.out.print("[");for(int i=0;i<arr.length;i++){if(i!=(arr.length-1))System.out.print(arr[i]+",");elseSystem.out.print(arr[i]+"]");}System.out.println();}}
运行后的结果:
五、数组操作的常见问题
1、数组下标指针越界
例如:int[] a=new int[2]
System.out.println(a[2]);
数组a的角标为0,1。没有角标2的这一项。产生异常
2、数组空指针异常
例如:int[] a=new int[10];
a=null;//此时堆内存中的对象被释放了,不在指向数组,打印时就会产生空指针异常
System.out.println(a[0]);
3、int[]a=new int[10];
System.out.println(a);
//打印的是数组地址值,结果是一个哈希值
- Java语言基础语法(二)数组
- Java语言的基础语法(二)
- Java基础语法(二)---函数与数组
- java语法基础(二)
- java基础:语法(二)
- Java基础语法(二)
- Java语法基础(二)
- Java--基础(二)语法
- java基础语法(二)
- R语言语法基础(二)
- java基础—二(基础语法)
- java语言语法基础
- 二、JAVA语法基础
- java基础语法(二)
- 二、java语法基础
- 二 Java基础语法
- Java学习备忘录(二)基础语法和数组(原创)
- 04 Java基础语法(函数、数组)
- IOS OC声明变量在@interface括号中与使用@property的区别
- Redis 学习笔记五 常用php函数
- 12306铁路售票系统核心开源中间件Geode介绍
- 模拟信号数字化传输系统建模与分析
- LintCode SingleLeton 单例
- Java语言基础语法(二)数组
- Android——ViewPager和内部view之间的事件分发及轮播图
- 黑马程序员---2015.6.24java基础笔记--FileWriter- FileReader-BufferedWriter-BufferedReader
- 关于学习编程的方法摘录
- 'module' object has no attribute 'getppid' odoo openerp debug报错
- Java生成图形化验证码
- 细说存储过程
- cocos2dx3.6 弹出对话框的实现
- JAVA基础第四天