------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一维数组
在Java中有两种数据:primitive类型和objects.
数组属于object类型,所以必须用new来创建数组,同时数组具备一下特性:
1.数组创建之后就不能改变大小
2.数组创建之后,若没有指定初始值,则依据数组类型的不同,会预设不同的初始值
int[] myArray; //定义一个指向数据的refference
myArray = new int[100]; // 创建一个可容纳100个元素的数组,并且用myArray指向它,默认所有的元素值被初始化成0
也可以在创建数组的同时进行初始化,这种方式不用指定数组的长度:
int[] myArray = {0,3,6,9,12,15,18,21,24,27};
或者
int[] myArray = new int[] {0,3,6,9,12,15,18,21,24,27};
3.数组有一个length属性,可以取回数组中元素的个数
int arrayLength = myArray.length;
二维数组
二维数组用数组“名称”与“两个索引”来指定存取数组中的元素。
其定义方式与一维数组类似:
int[][] arr = {{1,2,3},
{4,5,6}};
注意length所代表的长度,数组名后直接加上length(如arr.length),所指的是数组有几行;指定索引后加上length(如arr[0].length),指的是该行拥有的元素,也就是列的数目。
数组的复制
1.使用System.arraycopy()方法
System.arraycopy(来源,起始索引,目的,起始索引,复制长度);
例如:
int[] arr1 = {1,2,3,4,5};
int[] arr2 = new int[5];
System.arraycopy(arr1, 0,arr2, 0, arr1.length);
2.在Java SE 6中,Arrays类新增了copyOf()方法,可以直接返回一个新的数组对象,而其中包括复制的内容
例如:
import java.util.Arrays;
int[] arr1 = {1,2,3,4,5};
int[] arr2 =Arrays.copyOf(arr1,arr1.length);
Arrays的copyOf()方法返回的数组是新的数组对象,所以改变返回数组中元素的值不会影响原来数组中元素的值。copyOf()方法中第二个变量指定新数组的长度,如果新数组的长度超过原来数组的长度,则多出来的元素会保留数组默认值。
除了copyOf()方法外,还有copyOfRange()方法,可以指定来源数组以及要复制的索引范围:
int arr1 = {1,2,3,4,5};
int arr2 =Array.copyOfRange(arr1,1,4); // 复制索引1开始到索引4(但不包括索引4)的元素,arr2的元素会是2,3,4
Array类
Array类位于java.util包中,它提供了几个方法可以直接使用:
sort() -对指定数组排序,使用的是快速排序法
binarySearch() -让你对已排序的数组进行二分查找,如果找到指定的值就返回该值所在的索引,否则就返回负值
fill() - Arrays.fill()将已创建数组的默认值改为指定值
equals() -比较两个数组中的元素值是否全相等,如果相等返回true,否则返回false
排序
//使用选择排序方式对指定的数组进行排序
02.
03.class Demo
04.{
05. public static void main(String[] args)
06. {
07. int[] arr= {1,11,5,3,9,55,23,67,18};
08. //输出原数组
09. printArray(arr);
10. //调用排序方法
11. selectSort(arr);
12. //输出排序后的数组
13. printArray(arr);
14. }
15.
16./*
17.选择排序
18.1、先用0角标上的元素依次与其他元素进行比较,将较小值元素存放到0角标。
19.2、然后再拿1角标上的元素依次进行比较,以此类推。
20.*/
21. public static void selectSort(int[] arr)
22. {
23. //外循环遍历数组
24. for (int x=0;xarr[y])
31. {
32. //arr[x]=arr[y];
33. //arr[y]=temp;
34. swap(arr,x,y);
35. }
36. }
37. }
38. }
39.
40. //遍历数组
41. public static void printArray(int[] arr)
42. {
43. System.out.print("[");
44. for (int x=0;x
//使用冒泡排序方式对指定程序进行排序
02.
03.class Demo1
04.{
05. public static void main(String[] args)
06. {
07. int arr[]={22,63,89,13,6};
08. //打印原数组
09. printArray(arr);
10. //调用排序方法
11. bubbleSort(arr);
12. //打印排序后的数组
13. printArray(arr);
14. }
15.
16. /*
17. 冒泡排序
18. 1、先从头角标相邻两个元素之间进行比较,将较大值存放在后一个元素中,然后再与后一个元素的进行比较,直至最大值存放到最后一个元素中。
19. 2、再重复1操作,每次计较次数减一,一圈比完后存放的较大元素不再参与比较。
20. */
21.
22. public static void bubbleSort(int[] arr)
23. {
24. for (int x=0;xarr[y+1])
29. swap(arr,y,y+1);
30. }
31. }
32. }
33. //遍历数组
34. public static void printArray(int[] arr)
35. {
36. System.out.print("[");
37. for (int x=0;x
需求:将一个已知元素插入到一个有序数组中,要求不改变数组顺序,打印元素应该插入数组位置的角标。
03.思路:1、可以利用折半查找的方式,先定义两个变量,一个初始化0角标,作为最小值,一个初始化为最后一个角标,作为最大值,
04. 再定义一个变量,存储最小值与最大值的一半,也就是中间位置,然后将已知元素与中间值位元素进行比较。
05. 2、如果比中间值元素大,则将最小值变为中间值加1,继续取最小值与最大值的中间值元素与已经元素进行比较,以此反复
06. 3、如果比中间值元素小,则将最大值变为中间值减1,继续取最小值与最大值的中间值元素与已经元素进行比较,以此反复
07.*/
08.class HalfSearch
09.{
10. public static void main(String[] args)
11. {
12. int[] arr={2,6,9,11,15,19,22,30};
13. //打印数组
14. printArray(arr);
15. int key=20;
16. //用第一种折半方式输出插入的角标值
17. System.out.println("当key=20在数组arr中插入的角标位置是:"+halfSearch1(arr,key));
18. key=1;
19. //用第二种折半方式输出插入的角标值
20. System.out.println("当key=1在数组arr中插入的角标位置是:"+halfSearch2(arr,key));
21. }
22.
23. //折半查找<一>
24. public static int halfSearch1(int[] arr,int key)
25. {
26. int min=0,max=arr.length-1,mid=(max+min)/2;
27. while(key!=arr[mid])
28. {
29. if(min>max)
30. return min;
31. else if(key>arr[mid])
32. min=mid+1;
33. else
34. max=mid-1;
35. mid=(max+min)>>>1;//折半操作
36. }
37. return mid;
38. }
39.
40. //折半查找<二>
41. public static int halfSearch2(int[] arr,int key)
42. {
43. int min=0,max=arr.length-1,mid;
44.
45. while(min>>1;//折半操作
48. if(key>arr[mid])
49. min=mid+1;
50. else if(key
进制转换
/*
02.使用查表法将十进制转换为二进制、八进制、十六进制
03.*/
04.class Conversion
05.{
06. public static void main(String[] args)
07. {
08. int num=60;
09.
10. toBin(num);
11.
12. toOct(0);
13.
14. toHex(-num);
15. }
16.
17. //转换为二进制
18. public static void toBin(int num)
19. {
20. conversion(num,1,1);
21. }
22.
23. //转换为八进制
24. public static void toOct(int num)
25. {
26. conversion(num,7,3);
27. }
28.
29. //转换为十六进制
30. public static void toHex(int num)
31. {
32. conversion(num,15,4);
33. }
34. //转换
35. public static void conversion(int num,int diwei,int yiwei)
36. {
37. //如果num等于0,结果输出为0
38. if(num==0)
39. {
40. System.out.println("num="+0);
41. return;
42. }
43. //定义一个包含二进制、八进制、十六进制的表
44. char[] chs={'0','1','2','3','4','5','6','7',
45. '8','9','A','B','C','D','E','F',};
46.
47. //定义一个临时容器
48. char[] arr=new char[32];
49.
50. //定义一个操作数组的指针
51. int pos=arr.length;
52.
53. //利用与低位最大值的方式取出低位,存到临时数组中
54. while(num!=0)
55. {
56. arr[--pos]=chs[num&diwei];//--pos倒着往临时容器里存
57. num >>>=yiwei; //无条件右移相应位数
58. }
59.
60. //打印转换后的结果
61. for(int x=pos;x