数组使用的核心思想

来源:互联网 发布:朱宏钧 知乎 年龄 编辑:程序博客网 时间:2024/05/16 04:14
数组使用的核心思想:

数组特点:1.固定长度 2. 元素都有索引

什么时候使用数组(容器)呢?

数据多了,必须先进行存储,然后进行操作。

对于数组容器什么时候用呢?

数据多个数确定,而且有对应关系


在分析需求时:
1.需求中的数据是否有对应的有序编号
2.需求中的数据是否需要有序的编号
如果有,就用数组存储。


例1:一组数: 34,89,12,70,45 要对他们进行操作,需要编号,操作更容易。

另一组数: 100,101,102,103 就不需要编号


例2: 根据用户输入的数据,显示对应的星期   用 switch,if 方法什么的不说了。。
思路:
1.星期有多个,个数固定
2.星期都由对应的有序编号
所以可以使用数组这种结构进行存储

定义一个功能,根据给定的数据获取对应的星期。
(重点是思想
(代码什马的都不重要)

查表法:数据之间存在对应的关系通过关系中的一方查询另一方。
当对应关系存在,但没有一方是有序编号时,使用另一个容器,map


public static String getWeek(int num){if(num>7||num<1)return num+"没有对应的星期";//1.定义一个数组,存储对应的星期数,这个称之为存储了一个对应关系的表。String[] weeks = {"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"}; //根据指定的索引查表return weeks[num]}

配上个图(一维数组的内存图解):

数组定义的图解:


给数组赋值时的内存图解:

注:sop是System.out.println的意思。


改变数组的地址指向的图解:

因为数组是引用型数据类型,所以arr,xxx中存储的实际上是堆内存中数组实体的地址,当arr=xxx时,arr就不会指向0x0023而是指向0x0078,所以0x0023处的数组实体就成为了垃圾,JAVA中的垃圾回收机制会不定时的处理这些堆内存中的垃圾,防止内存溢出。



练习题:

1.

对一个给定的数组进行翻转
{23,14,88,5}-->
{5,88,14,23}

class Demo{public static void main(String args[]){int [] = {23,14,88,5};for(int start=0,end = arr.length-1;start < end;start++,end--){swap(arr,start,end);}}public static void swap(int [] arr,int a,int b){arr[a] = arr[a] ^ arr[b];arr[b] = arr[a] ^ arr[b];arr[a] = arr[a] ^ arr[b];}}

2.

/*思考题:需求:如果往有序的数组中插入一个元素并继续保证有序,如何获取该位置?思路:1.既然是有序的数组,而且是找位置,必须要想到<span style="color:#ff0000;">二分查找法</span>*/
import java.util.Arrays;class Demo{public static void main(String args[]){int[] arr = {9,13,25,29,45,46,88,99};int index = binarySearch2(arr,7);//int index2 = Arrays.binarySearch(arr,7); //JAVA自带的二分查找方法,若存在该数,则返回角标//不存在则返回一个负数,该负数取正再减1就是插入点System.out.println("index="+index);//System.out.println("index2="+index);}public static int binarySearch2(int[] arr,int key){//1.定义三个变量,记录头角标,尾角标,中间角标int max,min,mid;min = 0;max = arr.length-1;while(min<=max){mid = (max+min)>>1;if(key>arr[mid])min = mid + 1;else if(key<arr[mid])max = mid - 1;elsereturn mid;}return min;}}

获取插入点后剩余的部分就好处理了,这里就不多讲了,重新定义一个数组(比原数组长度多一),插入点之前的原样插入,插入点处插入要求的数据,后面的数据顺延即可。

又到了凌晨,╮(╯▽╰)╭唉,悲催的程序猿...

看会奥运会吧 得意得意得意得意得意得意得意





0 0