黑马程序员——Java基础04(数组)
来源:互联网 发布:如何利用网络招聘 编辑:程序博客网 时间:2024/04/26 07:27
——- android培训、java培训、期待与您交流! ———-
1.1:数组
1,概念
同一种类型数据的集合。简单的来说就是一容器,用来装东西的。
使用数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。
2,一维数组的格式
格式1:元素类型 [ ]数组名 = new 元素类型 [元素个数或数组长度] ;
如: int [] arr = new int [3]; 也可以写成: int arr[] = new int[3];
格式2:元素类型 []数组名 = new 元素类型 [ ]{元素1,元素2,…};
如: int [] arr = new int []{1,2,3,4,5};
还有一种简写的静态初始化格式:如: int [] arr={1,2,3,4,5};
其中:new是用来在堆内存中产生一个容器实体。
3,内存小知识:
Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,有对空间进行了不同区域的划分,
因为每一片区域都有特定的处理数据方式和内存管理方式。
内在中的区域:栈内存、堆内存、方法区、本地方法区、寄存器
栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放。 堆内存:1、数组和对象,通过new建立的实例都存放在堆内存中。 2、每一个实体都有内存地址值。 3、实体中的变量都有默认初始化值。 4、实体不在被使用,会在不确定的时间内被垃圾回收器回收。
4,数组操作常见问题
1、数组脚标越界异常(ArrayIndexOutOfBoundsException)。例:
int[] arr = new int[2];
System.out.println(arr[3]);
访问到了数组中的不存在的脚标时发生。
2、空指针异常(NullPointerException)。例:
int[]arr = null;
System.out.println(arr[0]);
arr引用没有指向实体,却在操作实体中的元素时。
1.2:二维数组
二维数组:数组中的数组,也称多维数组,这里我们主要讲二维数组。
格式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][];
注:此种格式中每个一维数组都是默认初始化值null。
格式3:int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};//每一个一维数组中具体元素都初始化了。
注:一种特殊定义写法:int[]x,y[]; x是一维数组,y是二维数组。
1.3:数组常见操作
1,选择排序
示例:
public class SelectSort { /* 选择排序。 内循环结束一次,最值出现头角标位置上。 */ public static void main(String[] args) { int[] arr = { 5, 1, 6, 4, 2, 8, 9 }; // 排序前; printArray(arr); selectSort(arr); // 排序后 printArray(arr); } 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; } } } } public static void printArray(int[] arr) { System.out.print("["); for (int x = 0; x < arr.length; x++) { if (x != arr.length - 1) System.out.print(arr[x] + ", "); else System.out.println(arr[x] + "]"); } }}
2,冒泡排序
示例:
public class BubbleSort { /* 冒泡排序:相邻的两个元素进行比较,如果符合条件换位。 */ public static void main(String[] args) { int[] arr = { 5, 1, 6, 4, 2, 8, 9 }; // 排序前; printArray(arr); bubbleSort(arr); // 排序后 printArray(arr); } 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; } } } } public static void printArray(int[] arr) { System.out.print("["); for (int x = 0; x < arr.length; x++) { if (x != arr.length - 1) System.out.print(arr[x] + ", "); else System.out.println(arr[x] + "]"); } }}
3,折半查找
示例:
/*数组的折半查找练习:有一个有序的数组,想要将一个元素插入到该数组中,还要保证该数组是有序的。如何获取该元素在数组中的位置。*/import java.util.*;class ArrayTest4 { public static void main(String[] args) {// int[] arr = {3,2,1,5,4,2,9};// int index = getIndex(arr,2);// System.out.println("index="+index); int[] arr = {2,4,5,7,8,19,32,45};//8 int index = getIndex_2(arr,190); System.out.println("index="+index);// int x = Arrays.binarySearch(arr,190);//java提供好的一个进行折半查找的功能。开发时使用这个。// System.out.println("x="+x); } public static int getIndex_2(int[] arr,int key) { int min = 0,max = arr.length-1,mid; while(min<=max) { mid = (max+min)>>1; if(key>arr[mid]) min = mid + 1; else if(key<arr[mid]) max = mid - 1; else return mid; } return min; } /* 折半的第二种方式。 */ public static int halfSearch_2(int[] arr,int key) { int min = 0,max = arr.length-1,mid; while(min<=max) { mid = (max+min)>>1; if(key>arr[mid]) min = mid + 1; else if(key<arr[mid]) max = mid - 1; else return mid; } return -1; } /* 折半查找。提高效率,但是必须要保证该数组是有序的数组。 */ 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; } //定义功能,获取key第一次出现在数组中的位置。如果返回是-1,那么代表该key在数组中不存在。 public static int getIndex(int[] arr,int key) { for(int x=0; x<arr.length; x++) { if(arr[x]==key) return x; } return -1; }}
4,进制转换(查表法)
示例:
class ArrayTest6 { public static void main(String[] args) {// toHex(60); toBin(-6); } public static void toBin(int num) { //定义二进制的表。 char[] chs = {'0','1'}; //定义一个临时存储容器。 char[] arr = new char[32]; //定义一个操作数组的指针 int pos = arr.length; while(num!=0) { int temp = num & 1; arr[--pos] = chs[temp]; num = num >>> 1; } for(int x=pos; x<arr.length; x++) { System.out.print(arr[x]); } } /* 0 1 2 3 4 5 6 7 8 9 A B C D E F ==十六进制中的元素。 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 查表法:将所有的元素临时存储起来。建立对应关系。 每一次&15后的值作为索引去查建立好的表。就可以找对应的元素。 这样比 -10+'a'简单的多。 这个表怎么建立呢? 可以通过数据的形式来定义。 发现终于出结果了。但是是反着的。想要正过来呢?可以通过StringBuffer reverse功能来完成。 但是这个工具还没有学习。 所以可以使用已经学习过的容器:数组来完成存储。; */ public static void toHex(int num) { char[] chs = {'0','1','2','3' ,'4','5','6','7' ,'8','9','A','B' ,'C','D','E','F'}; //定义一个临时容器。 char[] arr = new char[8]; int pos = arr.length; while(num!=0) { int temp = num & 15; //System.out.println(chs[temp]); arr[--pos] = chs[temp]; num = num >>> 4; } System.out.println("pos="+pos); //存储数据的arr数组遍历。 for(int x=pos;x<arr.length; x++) { System.out.print(arr[x]+","); } }}
——- android培训、java培训、期待与您交流! ———-
- 黑马程序员——Java基础04(数组)
- 黑马程序员——java基础---数组
- 黑马程序员——Java基础---数组
- 黑马程序员——JAVA基础---数组
- 黑马程序员—Java基础—数组
- 黑马程序员—JAVA基础—数组
- 黑马程序员—Java基础—数组
- 黑马程序员——Java基础---数组
- 黑马程序员—Java语言基础(数组)
- 黑马程序员—java基础_数组
- 黑马程序员——Java基础总结(函数、数组)
- 黑马程序员——java编程基础(三)数组
- 黑马程序员——java基础语法(三)---数组
- 黑马程序员—数组基础
- 黑马程序员——Java基础---- 数组(静态初始化_常见问题)(04)
- 黑马程序员---Java基础--04天(数组)
- 黑马程序员---JAVA基础---数组(四)
- 黑马程序员-Java基础学习(数组)
- myeclipse新手开发快捷键(更新中)
- POJ 1170 暴搜+dp剪枝优先队列+状压
- 利用.bat(批处理)来删除KEIL编译生成的无用文件
- 我在武汉新东方上过的8个老师
- python--有关函数的问题
- 黑马程序员——Java基础04(数组)
- UVALive - 4043 Ants (二分图最大权匹配)
- SDK学院--棱镜SDK:棱镜SDK 二次验证方案
- 『iOS/Obj-C』Note Of 8-day Obj-C/iOS foundation course
- JAVA基础——IO流知识点完整总结版
- 股票成交价格确定方法详解
- Unity3D面试题整合
- java,maven,svn,idea环境配置
- 排序算法总结