java基础学习之数组 四
2017-02-08 16:52
176 查看
概念 数组就是同一种类型那个数据的集合,是一个容器,是引用类型,存储在堆中。
好处:可以自动给数组中的元素从0开始编号,方便操作这些元素
格式: 1. int[] arr=new int[5]; 创建一个长度为5 的,变量名为arr,类型为整型的数组。
2. int[] arr=new []{5,6,8,3,4}
int[] arr={5,6,8,3,4}
数组中常见问题:
1、数组角标越界 //ArrayIndexOutofBoundsException
2、空指针异常 //NUllPointerException 当引用没有任何指向,值为空的情况,该引用还在用于操作实体。
数组的操作:
1.获取数组中的数据,通常会用到遍历(for循环),arr.length代表数组的长度
代码:
2.打印数组中的元素,元素间用逗号隔开。
3.获取最值
4.数组排序-选择排序:内循环结束一次,最值出现在头角标位置上,第一个依次和后面的几个相比较
5.数组排序-冒泡排序:相邻的两个元素进行比较,第一圈,最值出现在最后。
6.数组置换
7.数组的一般查找:获取key第一次出现在数组中的位置,如果返回-1,则不存在
8.数组的折半查找:可以提高查找效率,但是必须是有序数组
第一种方式:
先找到头角标 和尾角标
min =0 //头角标
max=arr.length-1;//尾角标
mid =(min+max)/2;//中间角标
在要找得的值和中间角标不相等的情况下,循环查找。
如果要找的值比中间角标值大的话,头角标就是中间角标+1;
如果要找的值比中间角标小的话,尾角标就是中间角标-1;
中间角标重新赋值 mid =(min+max)/2;//中间角标
查找之后,如果头角标大于了尾角标的话 ,数组中就没有这个值,
第二种方式:
如果头角标和尾角标之间有距离,也就是说头角标和尾角标小于等于尾角标的时候,就进行折半。否则不存在 返回 -1
mid =(min+max)/2;//中间角标
之后呢 如果要找的值比中间角标值大的话,头角标就是中间角标+1;
如果要找的值比中间角标小的话,尾角标就是中间角标-1;
如果相等的话 就返回中间角标值。找到了
9数组的进制转换
十进制-二进制
//十进制转十六进制
10二维数组:数组中的数组
int[][] arr=new int [3][4];//定义了一个名称为arr的二维数组,这个二维数组中有3个一位数组,每一个一位数组中有四个元素,
//3代表的是二维数组的长度,4代表的是二维数组中每一个一位数组的长度。
int[][] arr =new int[3][];//
int[][] arr={{5,8,6,5},{4,5,2},{8,8,9}}
表示方式
int[][] x; int x[][]; int[] x[];
arr.length:二维数组的长度
arr[0].length:二维数组中第一个一位数组的长度
二维数组的遍历
好处:可以自动给数组中的元素从0开始编号,方便操作这些元素
格式: 1. int[] arr=new int[5]; 创建一个长度为5 的,变量名为arr,类型为整型的数组。
2. int[] arr=new []{5,6,8,3,4}
int[] arr={5,6,8,3,4}
数组中常见问题:
1、数组角标越界 //ArrayIndexOutofBoundsException
2、空指针异常 //NUllPointerException 当引用没有任何指向,值为空的情况,该引用还在用于操作实体。
数组的操作:
1.获取数组中的数据,通常会用到遍历(for循环),arr.length代表数组的长度
代码:
int[] arr=new int[5]; for(int x=0;x<arr.length;x++) { arr[x]; }
2.打印数组中的元素,元素间用逗号隔开。
int[] arr=new int[5]; for(int x=0;x<arr.length;x++) { if(x!=arr.length-1) System.out.print( arr[x]+","); else System.out.print( arr[x]); }
3.获取最值
//定义一个方法,返回最大值角标 public static int getmax(int[] arr){ int max=0; //定义一个变量初始化数组的0角标值 for(int x=0; x<arr.length;x++){//循环遍历数组 if(arr[max]<arr[x]){//如果临时元素小于遍历到的元素 max=x;//将遍历到的值的角标付给临时变量角标 } } return max; //返回最大值角标 }
4.数组排序-选择排序:内循环结束一次,最值出现在头角标位置上,第一个依次和后面的几个相比较
public static void xuanze(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[y]; arr[y]=arr[x]; arr[x]=temp; } } }
5.数组排序-冒泡排序:相邻的两个元素进行比较,第一圈,最值出现在最后。
public static void maopao(int[] arr){ for(int x=0; x<arr.length-1;x++){//控制比较的圈数 for(int y=0;y<arr.length-x-1;y++)//控制每圈比较的次数 -1是避免角标越界,-x是让每一次比较的元素减少 { if(arr[y]>arr[y+1]){ int temp=arr[y+1]; arr[y+1]=arr[y]; arr[y]=temp; } } }
6.数组置换
public static void maopao(int[] arr,int x, int y){ int temp=arr[x]; arr[x]=arr[y]; arr[y]=temp; }
7.数组的一般查找:获取key第一次出现在数组中的位置,如果返回-1,则不存在
public static int select(int[] arr,int key){ for(int x=0; x<arr.length;x++){ if(arr[x]==key){ return x; } } return -1; }
8.数组的折半查找:可以提高查找效率,但是必须是有序数组
第一种方式:
先找到头角标 和尾角标
min =0 //头角标
max=arr.length-1;//尾角标
mid =(min+max)/2;//中间角标
在要找得的值和中间角标不相等的情况下,循环查找。
如果要找的值比中间角标值大的话,头角标就是中间角标+1;
如果要找的值比中间角标小的话,尾角标就是中间角标-1;
中间角标重新赋值 mid =(min+max)/2;//中间角标
查找之后,如果头角标大于了尾角标的话 ,数组中就没有这个值,
第二种方式:
如果头角标和尾角标之间有距离,也就是说头角标和尾角标小于等于尾角标的时候,就进行折半。否则不存在 返回 -1
mid =(min+max)/2;//中间角标
之后呢 如果要找的值比中间角标值大的话,头角标就是中间角标+1;
如果要找的值比中间角标小的话,尾角标就是中间角标-1;
如果相等的话 就返回中间角标值。找到了
9数组的进制转换
十进制-二进制
//十进制转二进制 public static void tobin(int num) { StringBuffer sb=new StringBuffer();//创建一个StringBuffer容器用于接收对2取模的数 while (num>0){ sb.append(num%2); num=num/2; } System.out.print(sb.reverse()); }
//十进制转十六进制
public static void toHex(int num) { StringBuffer sb=new StringBuffer(); for(int x=0;x<8;x++) { int temp=num & 15; if(temp>9) sb.append((char)(temp-10+'A')); else sb.append(temp); num= num>>>4; } System.out.println(sb.reverse()); }
10二维数组:数组中的数组
int[][] arr=new int [3][4];//定义了一个名称为arr的二维数组,这个二维数组中有3个一位数组,每一个一位数组中有四个元素,
//3代表的是二维数组的长度,4代表的是二维数组中每一个一位数组的长度。
int[][] arr =new int[3][];//
int[][] arr={{5,8,6,5},{4,5,2},{8,8,9}}
表示方式
int[][] x; int x[][]; int[] x[];
arr.length:二维数组的长度
arr[0].length:二维数组中第一个一位数组的长度
二维数组的遍历
for(int x=0;x<arr.length;x++){ for(int y=0;y<arr[x].length;y++) { sum=sum+arr[x][y]; } }
最后附上JDK使用文档API 下载
相关文章推荐
- C\C++ 程序员从零开始学习Android - 个人学习笔记(四) - java基础 - 数据类型、变量、字符串、数组
- Java学习之旅基础知识篇:数组及引用类型内存分配
- 黑马程序员 Java基础学习笔记3 循环和数组
- java基础学习记录之利用数组查表法进行进制转换优化的学习与练习七(十转二、十转八、十转十六)
- java 从零开始,学习笔记之基础入门<数组列表(ArrayList)>(九)
- java基础学习记录之数组折半查找的学习与练习四
- Java基础学习笔记(二)数组,包装类
- java基础学习记录之数组最值的学习与练习一
- Java之数据结构基础、线性表、栈和队列、数组和字符串,树—学习笔记
- 黑马程序员——黑马学习日志之四 Java基础——数组
- JAVA基础第四天学习日记_数组
- JAVA基础知识学习笔记(流程控制、数组)
- 黑马程序员------java学习笔记之数组基础
- java基础学习记录之数组选择排序的学习与练习二
- JAVA数组,今天跟别人学习的,基础还是不过关。。。55555555555
- java基础学习_数组
- 【Java学习笔记】基础知识学习5【数组排序,复制】
- java基础学习四(数组)
- java基础学习记录之利用数组进行进制转换的学习与练习五
- Java学习备忘录(二)基础语法和数组(原创)