黑马程序员——Java基础 数组 (复习)
2015-08-25 11:15
344 查看
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
一、数组的概念
数组:同一种类型数据的集合,其实数组就是一个容器。
好处:可以给数组中的元素进行自动编号,从0开始,方便操作这些元素。
二、定义数组
1.定义数组的常见格式
格式1:元素类型[ ] 数组名 = new 元素类型 [ 元素个数或数组长度];
例:int[ ] arr = new int [3]; //定义名称为arr一个长度为3的数组
注:格式1的另一种写法: 元素类型 数组名[ ]= new 元素类型 [ 元素个数或数组长度];
格式2:元素类型 [ ] 数组名 = new 元素类型 { 元素1,元素2,元素3,........};
例: int [ ] arr = new int{1,2,3,4,5}; // 定义了名称为arr的数组,并且通过{}的形式,表示出了数组的元素的内容。
注:格式2也被称为静态初始化方式,它还有一种简化写法
元素类型[ ] 数组名 = {元素1,元素2,元素3,.........};
三、数组操作容易发生的异常
异常1:ArrayIndexOutOfBoundsException 角标越界异常。操作数组时,访问到了数组中不存在的角标。
异常2:NullPointerException 空指针异常。 当引用没有任何指向值为null的情况,该引用还在用于操作实体。
四、数组的常见操作汇总
1.获取数组中的元素:遍历
通过for循环,对数组进行遍历操作。
在数组中有一个属性,可以直接获取到数组中元素的个数。使用方式: 数组名
.length
例:int [ ] arr = {1,2,4,5,6,7};
for(int x = 0 ;x<arr.length;x++){
System.out.println(arr[x]);
} // 通过遍历操作将数组中的元素打印出来
2.获取最值(获取最大值、最小值)
思路:获取最值需要进行比较,每一次比较都会有一个较大(小)的,该值不确定,用一个临时变量进行存储。
让数组中的每一个元素和这个值进行比较,若果大(小)于该值,就将该变量记录较大(小)的值。
当所有的元素都比较过后,就完成了获取最值得操作。
3.数组的排序
数组的排序操作常用的有:选择排序、冒泡排序等。
3.1 选择排序
思路:将数组中的第一个元素与第二个元素进行比较,如果大于后面的值,就调换位置。
这样就将较小的元素放在了第一个位置上了,这是再继续用第一个位置的值与后面的比较。
这样第一次循环过后,我们就将整个数组中最小的值放到了数组的第一位也就是0角标位。
再通过上述操作对1角标位置的元素进行操作。如此循环,就可以给数组排序。
思路:相邻的两个元素进行比较,如果前一个值大于后一个值,就交换位置。
这时我们可以发现,经过循环后,值较大的都在往后移动,值较小的都在往前移动。
这样就可以实现排序。
4.数组的常见操作:查找
数组的查找:一般的思想是在给数组遍历的过程中,如果数组中的元素与目标元素相等,直接返回该元素的角标即可。
数组的查找还有另一种方式:折半查找。 但是折半查找有个前提:数组必须是有序的。
折半查找:
思路:1.先定义两个变量(int min ,int max ),一个初始化0角标,作为最小值,一个初始化为最后一个角标,作为最大值
然后还要定义个变量(int mid= (min+max)/2 ),作为中间值的位置。
2.用目标值与中间值进行比较,如果比中间值大,就将最小值变为中间值+1的位置,继续重复第一步操作,在进行比较,循环。
3.用目标值与中间值进行比较,如果比中间值小,就将最大值变为中间值-1的位置,继续重复第一步操作,在进行比较,循环。
五、二维数组
1.二维数组的概念
二维数组可以理解为数组中的数组。也就是把数组作为元素存到数组当中。
2.二维数组的定义
格式1:元素类型[ ] [ ] 数组名 = new 元素类型 [一维数组的个数 ] [每个一位数组的长度 ] ;
例: int [ ] [ ] arr = new int [2 ] [3 ]; //定义了一个二维数组,里面有2个一维数组,每个一维数组长度是3.
格式2: 例: int [ ] [ ] arr = { {1,2,3},{4,2,1},{2,3,4}};
六、Arrays 类
Arrays类是专门用于操作数组的工具类。里面封装了可以操作数组的一系列静态方法。
常用部分方法例:
binarySearch(arr , temp); 二分查找。
copy of (); 复制数组
copyOfRange( arr, from, end); 复制数组的一部分(包含头不包含尾)
equals(); 比较两个数组的内容是否一样
asList(); 将数组变成List集合
sort(); 对数组进行升序排序
toString(); 将数组变成字符串
由于Arrays中的方法都是static的,所以可以用类名直接调用。格式: Arrays . 方法名
一、数组的概念
数组:同一种类型数据的集合,其实数组就是一个容器。
好处:可以给数组中的元素进行自动编号,从0开始,方便操作这些元素。
二、定义数组
1.定义数组的常见格式
格式1:元素类型[ ] 数组名 = new 元素类型 [ 元素个数或数组长度];
例:int[ ] arr = new int [3]; //定义名称为arr一个长度为3的数组
注:格式1的另一种写法: 元素类型 数组名[ ]= new 元素类型 [ 元素个数或数组长度];
格式2:元素类型 [ ] 数组名 = new 元素类型 { 元素1,元素2,元素3,........};
例: int [ ] arr = new int{1,2,3,4,5}; // 定义了名称为arr的数组,并且通过{}的形式,表示出了数组的元素的内容。
注:格式2也被称为静态初始化方式,它还有一种简化写法
元素类型[ ] 数组名 = {元素1,元素2,元素3,.........};
三、数组操作容易发生的异常
异常1:ArrayIndexOutOfBoundsException 角标越界异常。操作数组时,访问到了数组中不存在的角标。
异常2:NullPointerException 空指针异常。 当引用没有任何指向值为null的情况,该引用还在用于操作实体。
四、数组的常见操作汇总
1.获取数组中的元素:遍历
通过for循环,对数组进行遍历操作。
在数组中有一个属性,可以直接获取到数组中元素的个数。使用方式: 数组名
.length
例:int [ ] arr = {1,2,4,5,6,7};
for(int x = 0 ;x<arr.length;x++){
System.out.println(arr[x]);
} // 通过遍历操作将数组中的元素打印出来
2.获取最值(获取最大值、最小值)
思路:获取最值需要进行比较,每一次比较都会有一个较大(小)的,该值不确定,用一个临时变量进行存储。
让数组中的每一个元素和这个值进行比较,若果大(小)于该值,就将该变量记录较大(小)的值。
当所有的元素都比较过后,就完成了获取最值得操作。
3.数组的排序
数组的排序操作常用的有:选择排序、冒泡排序等。
3.1 选择排序
思路:将数组中的第一个元素与第二个元素进行比较,如果大于后面的值,就调换位置。
这样就将较小的元素放在了第一个位置上了,这是再继续用第一个位置的值与后面的比较。
这样第一次循环过后,我们就将整个数组中最小的值放到了数组的第一位也就是0角标位。
再通过上述操作对1角标位置的元素进行操作。如此循环,就可以给数组排序。
/* 选择排序。 内循环结束一次,最值出现头角标位置上。 */ public static void selectSort(int[] arr) { for (int x=0; x<arr.length-1 ; x++) { for(int y=x+1; y<arr.length; y++) { if(arr[x]>arr[y]) { int temp = arr[x]; arr[x] = arr[y]; arr[y]= temp; } } } }3.2 冒泡排序
思路:相邻的两个元素进行比较,如果前一个值大于后一个值,就交换位置。
这时我们可以发现,经过循环后,值较大的都在往后移动,值较小的都在往前移动。
这样就可以实现排序。
/* 冒泡排序 */ public static void bubbleSort(int[] arr) { for(int x=0; x<arr.length-1; x++) { for(int y=0; y<arr.length-x-1; y++)//-x:让每一次比较的元素减少,-1:避免角标越界。 { if(arr[y]<arr[y+1]) { int temp = arr[y]; arr[y] = arr[y+1]; arr[y+1] = temp; } } } }
4.数组的常见操作:查找
数组的查找:一般的思想是在给数组遍历的过程中,如果数组中的元素与目标元素相等,直接返回该元素的角标即可。
数组的查找还有另一种方式:折半查找。 但是折半查找有个前提:数组必须是有序的。
折半查找:
思路:1.先定义两个变量(int min ,int max ),一个初始化0角标,作为最小值,一个初始化为最后一个角标,作为最大值
然后还要定义个变量(int mid= (min+max)/2 ),作为中间值的位置。
2.用目标值与中间值进行比较,如果比中间值大,就将最小值变为中间值+1的位置,继续重复第一步操作,在进行比较,循环。
3.用目标值与中间值进行比较,如果比中间值小,就将最大值变为中间值-1的位置,继续重复第一步操作,在进行比较,循环。
<span style="white-space:pre"> </span>/* 折半查找。提高效率,但是必须要保证该数组是有序的数组。 */ public static int halfSearch(int[] arr,int key) { int min,max,mid; min = 0; max = arr.length-1; mid = (max+min)/2; while(arr[mid]!=key) { if(key>arr[mid]) min = mid + 1; else if(key<arr[mid]) max = mid - 1; if(min>max) return -1; mid = (max+min)/2; } return mid; }
五、二维数组
1.二维数组的概念
二维数组可以理解为数组中的数组。也就是把数组作为元素存到数组当中。
2.二维数组的定义
格式1:元素类型[ ] [ ] 数组名 = new 元素类型 [一维数组的个数 ] [每个一位数组的长度 ] ;
例: int [ ] [ ] arr = new int [2 ] [3 ]; //定义了一个二维数组,里面有2个一维数组,每个一维数组长度是3.
格式2: 例: int [ ] [ ] arr = { {1,2,3},{4,2,1},{2,3,4}};
六、Arrays 类
Arrays类是专门用于操作数组的工具类。里面封装了可以操作数组的一系列静态方法。
常用部分方法例:
binarySearch(arr , temp); 二分查找。
copy of (); 复制数组
copyOfRange( arr, from, end); 复制数组的一部分(包含头不包含尾)
equals(); 比较两个数组的内容是否一样
asList(); 将数组变成List集合
sort(); 对数组进行升序排序
toString(); 将数组变成字符串
由于Arrays中的方法都是static的,所以可以用类名直接调用。格式: Arrays . 方法名
相关文章推荐
- 黑马程序员-----Java基础-----IO流-3
- 面试题24二叉搜索树的后序遍历序列cpp
- 《招聘一个靠谱的iOS》面试题参考答案(下)
- 《C程序员从校园到职场》带领大家从校园走向职场
- 代码面试最常用的10大算法(Java)
- 黑马程序员-学习笔记-查漏补缺
- 黑马程序员-学习笔记-多线程
- 解析程序员的几个成长阶段
- 黑马程序员_Java基础面向对象之继承
- 面试题23从上往下打印二叉树
- 程序员的年龄天花板
- 程序员常用网站汇总
- 高效程序员的7个特征
- 20年资深程序员编程经验分享
- 程序员最该看的30本书---------------------------国外编辑推荐
- 面试题22 栈的压入弹出序列
- 黑马程序员_Java基础之多线程
- 应届生的求职之路
- 什么情况让程序员处于水生火热中
- 每天5道面试题(二)java基础