java 自学日志【四】---数组
来源:互联网 发布:剑三正太捏脸数据图片 编辑:程序博客网 时间:2024/05/16 14:45
------android培训,java培训,期待与您交流------
-------数组-------
概念:同一种类型数据的结合!
特点:可以自动给数组中的元素从0开始编号,以方便对数组进行操作!
格式1: 元素类型[ ] 数组名 = new 元素类型[元素个数或数组长度];// new 关键字,用来操作存储数据;
或者 元素类型 数组名[ ] = new 元素类型[元素个数或数组长度] 也可以;
如:int[] arr = new int [2];或者 int arr[]= new int [2];
格式2:元素类型[ ] 数组名 = new 元素类型[] {1,2,3,4,6,7};// 此时[]里不可以写数组的长度;
或者 元素类型[] 数组名 = {1,1,3,4,5,6,...};
如:int [] arr= new int []{1,3,4,56,45};或者 int [] arr = {1,2,3,4,5};
了解下java内存结构:java程序在运行时,需要在内存中分配空间,主要划分了五个区!
① 栈内存:又叫栈空间,用于存储局部变量,当数据使用完,所占内存空间会自动释放。
(局部变量:定义在方法(函数) 中或参数上的变量,如 for循环里的变量,存于栈内存中。
② 堆内存:存储数组和对象,通过new建立的实例都存放在堆内存中,每一个实例在堆内存中都有内存地址值,实体
中的变量,都有默认初始化值(引用类型为 null,int是0,double是0.0,float是0.0f,boolean是false),
当实体不在被使用,会在不确定时间内,被垃圾回收器回收。
③方法去 ④本地方法去 ⑤寄存器这三个分区会在以后内容讲到。
数组中操作常见的问题:
① 数组角标越界异常:java.lang.ArrayIndexOutOfBoundsException,int[] arr = new int [2];System.out.println(arr[2]);
② 空指针异常:java.lang.NullPointerException int[] arr = null;System.out.print(arr[1]);
数组中常见的操作:
①获取最大值或最小值,以最大值为例,代码如下:
class ArrayTest{public static void main(String[] args){int[] arr={1,4,3,6,8,13,23,33,12,9};int max=getMax(arr);System.out.println(max);}public static int getMax(int[] arr){int max=arr[0];if(arr!=null)for(int x=1;x<arr.length;x++){if(arr[x]>max)max=arr[x];}return max;}}
② 数组排序,选择排序和冒泡排序,代码如下:
选择排序:最值出现在0角标位置上,下面是由小到大排序
class ArrayTest{public static void main(String[] args){int[] arr={1,4,3,6,8,13,23,33,12,9};sort(arr);printArray(arr);}public static void sort(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]+", ");elseSystem.out.println(arr[x]+"]");}}}
冒泡排序:相邻两个元素比较,符合条件换位,最值出现在最后位。
class ArrayTest{public static void main(String[] args){int[] arr={1,4,3,6,8,13,23,33,12,9};sort(arr);printArray(arr);}public static void sort(int[] arr){for(int x=0;x<arr.length-1;x++)for(int y=0;y<arr.length-x-1;y++){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]+", ");elseSystem.out.println(arr[x]+"]");}}}
③ 查找数组中某一元素第一次出现的位置,若不存在,返回-1。
class ArrayTest{public static void main(String[] args){int[] arr={1,4,3,6,8,13,23,33,12,9};int a=search(arr,4);System.out.println(a);}public static int search(int[] arr,int key){for(int x=0;x<arr.length;x++){if(arr[x]==key)return x;}return -1;}
折半查找,前提是要求数组是有序的,如果无需则先排序,再查找。
class ArrayTest{public static void main(String[] args){int[] arr={1,4,3,6,8,13,23,33,12,9};sort(arr);int a=search(arr,6);System.out.println(a);}public static void sort(int[] arr){for(int x=0;x<arr.length-1;x++)for(int y=0;y<arr.length-x-1;y++){if(arr[y]>arr[y+1]){int temp=arr[y];arr[y]=arr[y+1];arr[y+1]=temp;}}}public static int search(int[] arr,int key){int max=arr.length-1,min=0,mid;while(max>=min){mid=(max+min)/2;if(key>arr[mid])min=mid+1;else if(key<arr[mid])max=mid-1;else return mid;}return -1;}}
④ 进制转换
public class BaseTrans { public static void main(String[] args) { toBin(60); toHex(60); toOct(60); } //十进制转化成二进制 public static void toBin(int num){ trans(num, 1, 1); } //十进制转化成八进制 public static void toOct(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){ //查表法,定义表 char[] chs={'0','1','2','3','4','5','6','7', '8','9','a','b','c','d','e','f'}; //定义一个数组,将每次取出的值,查表后存入该数组中。 char[] res=new char[32]; //定义指针偏移量,记录从后往前存入数组时,最后一个存入元素的位置。int pos=res.length; while(num!=0)//有效数字取完则结束循环{ int temp = num&base;//取最低的offset位的值。 res[--pos]=chs[temp];//将值存入结果数组中 num =num >>> offset;//无符号右移offset位。 } //打印结果 for(int x = pos;x<res.length;x++){ System.out.print(res[x]); } System.out.println(); } }
-------二维数组------
数组中的每一个元素又是一个数组。int[] [] arr,arr就表示一个二维数组的引用,前边有几个[ ] 维度就是几。
格式①: int [] [] arr = new int[4] [5]; 这表示定义了一个二维数组,二维数组长度是4,它里边有4个一维数组,每个一维数组有5个元素,一维数组的每个元素的初始化值为0。
int[][] arr = new int[4] [ ];它也是定义了一个二维数组,它里边也有4个一维数组,但每个一维数组里边有几个元素未定,其初始化值为null,所以不能直接调用一维数组的元素,此时打印 arr[]值为null,可以分别对每个一维数组其进行初始化。如下:
arr[0]= new int[2]; arr[1]= new int[3]; arr[2]= new int[5]; arr[3]= new int[3]; 此时就给二维数组中的每一个一维数组定义了长度。
此时 我们打印 arr[0],是打印的地址,而打印 arr[0][1]是打印它元素,值为0。
格式②:int[] [] arr = {{1,2,3},{4,5,6,7},{8,9,10}};不仅定义了二维数组的长度,还定义了二维数组的内容。
注意:int [] x,y[ ];此时y是一个二维数组,x是一个一维数组。另外不能这样写:int [] [] arr = new int [ ] [ 4],必须先明确一维数组的个数,然后再明确一维数组每个元素的个数。
- java 自学日志【四】---数组
- Java 自学日志【一】
- Java 自学日志【二】
- java自学日记四
- java自学-数组
- java 自学日志【八】---异常
- java 自学日志【九】---多线程
- java 自学日志【十五】---GUI
- JAVA自学笔记(四)异常
- 自学JAVA[DAY006]--JAVA数组
- Java自学笔记之数组
- java自学——数组
- 《JAVA程序设计》日志四
- Java程序日志四
- java 自学日志【十】---String类
- java 自学日志【十一】---集合框架
- java 自学日志【十二】---工具类
- java 自学日志【十三】---IO流
- 315,这是一场神奇的晚会
- 4_4
- asp.net C# NPOI 读取 Excel 文件
- 基于网络爬虫的XSS漏洞检测技术
- php curl
- java 自学日志【四】---数组
- 为什么广东人不看央视
- data mining & blog (foreign)
- 浏览器变编辑器
- 辗转相除法
- J2EE 中间件 JVM 集群
- Hibernate第十二讲 树形结构
- GNOME显示管理器 (GNOME Display Manager,GDM)简介
- mac os x上搭建iOS和android开发环境