黑马程序员——Java学习笔记 数组
来源:互联网 发布:软件行业人才需求 编辑:程序博客网 时间:2024/05/07 20:32
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一、数组的概述
数组中的元素都是同一种类型。数组的长度在创建时确定,并且在创建后不变。如果需要建立存储不同类型数据的集合,或者要求这种数据存储结构的长度可以动态变化,可以使用Java.util包中的各种集合(collection)类。数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。
1、数组的创建与初始化
格式1:
元素类型[] 数组名= new 元素类型[元素个数或数组长度];示例:int[] arr = new int[5];
格式2:
元素类型[] 数组名= new 元素类型[]{元素,元素,……};
示例:int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7};
2、内存结构
Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内 存管理方式。
栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存:数组和对象,通过new建立的实例都存放在堆内存中。
每一个实体都有内存地址值,实体中的变量都有默认初始化值,实体不在被使用,会在不确定的时间内被垃圾回收器回收,其他内存空间:方法区,本地方法区,寄存器。
3、数组操作常见问题
数组脚标越界异常(ArrayIndexOutOfBoundsException)
int[] arr = new int[2];
System.out.println(arr[3]);
异常的原因:访问到了数组中的不存在的脚标时发生。
空指针异常(NullPointerException)
int[] arr = null;
System.out.println(arr[0]);
异常的原因:arr引用没有指向实体,却在操作实体中的元素时
4、数组的长度
Java中为所有数组设置了一个表示数组元素个数的特性变量length,它作为数组一部分存储起来。Java用该变量在运行时进行数组越界检查,应用程序也可以访问该变量获取数组的长度。使用方法:数组名称.length。
5、多维数组
Java语言的多维数组可以看作是数组的数组,即n维数组是n-1维数组的数组。下面主要以二维数组为例进行说明。
创建多维数组:
格式1:
int[][] arr = new int[3][2];
定义了名称为arr的二维数组,二维数组中有3个一维数组,每一个一维数组中有2个元素,一维数组的名称分别为arr[0], arr[1], arr[2],给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;
格式2:
int[][] arr = new int[3][];
在格式2创建了一个二维不规则数组,二维数组中有3个一维数组,每个一维数组都是默认初始化值null,可以对这个三个一维数组分别进行初始化。
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
格式3:
int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
定义一个名称为arr的二维数组,二维数组中的有三个一维数组,每一个一维数组中具体元素也都已初始化,第一个一维数组arr[0] = {3,8,2};第二个一维数组arr[1] = {2,7};第三个一维数组arr[2] = {9,0,1,6};第三个一维数组的长度表示方式:arr[2].length;
注意特殊写法情况:int[] x,y[]; x是一维数组,y是二维数组。
二、数组的运用练习
1、数组的复制数组变量之间赋值是引用赋值,不能实现数组数据的复制,进行数组数据的复制要使用Java语言在java.lang.System类中提供的数组复制方法。该方法如下所示:
public static void arraycopy(Object src
int srcIndex,
Object dest,
int destIndex,
int length)
指定的位置开始,到目标数组的指定位置结束。从 src 引用的源数组到 dest 引用的目标数组,数组组件的一个子序列被复制下来。被复制的组件的编号等于 length 参数。源数组中位置在 int srcIndex到 int srcIndex+length-1 之间的组件被分别复制到目标数组中的 destIndex到 destIndex+length-1 位置。
2、选择排序
原理:内循环结束一次,最值出现x角标位置上。
<span style="font-family:SimSun;font-size:14px;"> public static void selectSort(int[] arr) { for (int x=0; x<arr.length-1 ; x++) //外循环共有length-1次 { for(int y=x; y<arr.length-1; y++) //x角标位分别与其后的每个元素进行比较 { if(arr[x]>arr[y]) //最小的数出现在x角标位置上 { int temp = arr[x]; arr[x] = arr[y]; arr[y]= temp; } } } }</span>3、冒泡排序
相邻两个元素比较,满足条件则换位。
<span style="font-family:SimSun;font-size:14px;"> public static void bubbleSort(int[] arr) { for(int x=0; x<arr.length-1; x++) //外循环共有length-1次 { for(int y=0; y<arr.length-x-1; y++) //进行arr.length-x-1次比较 { if(arr[y]<arr[y+1]) //相邻两个元素进行比较并将最小值后移 { int temp = arr[y]; arr[y] = arr[y+1]; arr[y+1] = temp; } } } }</span>附:Arrays.sort(arr); //java中已经定义好的一种排序方式。
4、折半查找
折半查找:提高效率,但是必须要保证该数组是有序的数组。
折半的第一种方式:
判断key值是否与角标中间值相等。
<span style="font-family:SimSun;font-size:14px;"> public static int halfSearch_1(int[] arr,int key) { int min = 0,max= arr.length-1,mid; //设置最大和最小角标 mid = (max+min)/2; //中间值角标 while(arr[mid]!=key) //判断当角标中间值不等于key值 { if(key>arr[mid]) //当key值大于角标中间值 min = mid + 1; //更改最小值角标 else if(key<arr[mid]) max = mid - 1; if(min>max) //当<span style="font-family:SimSun;font-size:14px;">角标最大值小于<span style="font-family:SimSun;font-size:14px;">角标</span>最小值</span>,key不存在 return -1; mid = (max+min)/2; //未找到key则重设角标中间值 } return mid; //返回等于key的角标 }</span>
折半的第二种方式:
在角标最大值大于等于角标最小值的情况下,判断key值是否与脚标中间值相等。
<span style="font-family:SimSun;font-size:14px;"> public static int halfSearch_2(int[] arr,int key) { int min = 0,max = arr.length-1,mid; while(min<=max) //当<span style="font-family:SimSun;font-size:14px;">角标最大值大于等于角标最小值</span> { mid = (max+min)>>1; //设置角标中间值 if(key>arr[mid]) //当key值大于中间值更改最小值角标 min = mid + 1; else if(key<arr[mid]) //当key值小于中间值更改最大值角标 max = mid - 1; else return mid; //返回等于key的角标 } return -1; }</span>附:int x = Arrays.binarySearch(arr,190);
java提供好的一个进行折半查找的功能。开发时使用Arrays.binarySearch()。
练习:有一个有序的数组,想要将一个元素插入到该数组中,还要保证该数组是有序的。如何获取该元素在数组中的位置。
答:mid的角标位或者min角标位。
5、进制转换:
查表法:
将所有的元素临时存储起来,建立对应关系,例如十进制-->十六进制,调用public static void toHex(int num),每一次&15后的值作为索引去查建立好的表。就可以找对应的元素,这样比 -10+'a'简单的多。
<span style="font-family:SimSun;font-size:14px;">class ArrayTest7 { public static void main(String[] args) { //toBin(-6); } /* 十进制-->二进制 */ public static void toBin(int num) { trans(num,1,1); } /* 十进制-->八进制 */ public static void toBa(int num) { trans(num,7,3); } /* 十进制-->十六进制 */ public static void toHex(int num) { trans(num,15,4); } public static void trans(int num,int base,int offset) //定义函数 { if(num==0) //当数据等于零时。 { System.out.println(0); return ; } char[] chs = {'0','1','2','3' ,'4','5','6','7' ,'8','9','A','B' ,'C','D','E','F'}; //定义数组包含十六进制内所有数,作为进制转换表 char[] arr = new char[32]; //定义临时容器,存储转换结果。 int pos = arr.length; //获取数组长度 while(num!=0) //当最高位都是零时,停止循环。 { int temp = num & base; arr[--pos] = chs[temp]; //从数组最高位开始存储数据 num = num >>> offset; //根据需要移位 } for(int x=pos; x<arr.length; x++) //输出数据 { System.out.print(arr[x]); } }}</span>
6、对数组进行反转:
<span style="font-family:SimSun;font-size:14px;"> public static void reverseArray(int[] arr){for(int start=0,end=arr.length-1;start<end;start++,end--)//首角标自加,尾角标自减{int temp = arr[start]; //首尾元素进行交换arr[start] = arr[end];arr[end] = temp;}}</span>
0 0
- 黑马程序员——JAVA学习笔记——数组
- 黑马程序员——学习笔记04.java数组
- 黑马程序员 java学习笔记——数组
- 黑马程序员——Java学习笔记 数组
- 黑马程序员java学习笔记——数组
- 黑马程序员——java学习笔记--数组
- 黑马程序员Java笔记——数组
- 黑马程序员—java数组学习回顾
- 黑马程序员-Java数组学习笔记
- 黑马程序员——Java学习笔记——数组的排序和查找
- 黑马程序员—Java基础学习笔记之数组排序(机选双色球)
- 黑马程序员-数组-学习笔记
- 黑马程序员—Java数组
- 黑马程序员——Java练习笔记——数组
- 黑马程序员——Java基础笔记---数组
- 黑马程序员——java学习数组的总结
- 黑马程序员java学习日记——数组
- 【黑马程序员】Java基础学习博客——数组
- 严重: Exception sending context initialized event to listener instance of class org.springframework.we
- 工业4.0
- JavaWeb高级
- Python属性和方法
- 浅谈一下线程中synchronized块、wait,notify的用法
- 黑马程序员——Java学习笔记 数组
- android ndk的简单应用
- mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符,可使用本函数来预防数据库攻击。
- eclipse 中添加工程 Some projects cannot be imported because they already exist in the workspace
- XSS Filter Evasion Cheat Sheet 中文版
- ALAsset,ALAssetsLibrary,ALAssetsgroup常见属性及用法
- willMoveToParentViewController和didMoveToParentViewController
- Swift小计
- WebService学习笔记系列(一)