5.1、数组与排序

来源:互联网 发布:设计画册的软件 编辑:程序博客网 时间:2024/05/16 11:45

1、java中的数组是引用类型的,即数组分数组元素和数组变量,数组元素存储数组的首地
址,存放在栈(steak)中;数组元素存储数组的数据,存放在堆(heap)中。

2、基本数据类型的变量存放在栈中,数据存放堆中;创建对象存放在动态内存区,以便反 复使用,当运行时数据区就是堆内存,堆内存的数据不会随着方法结束而立即销毁,除 非在没有其他对象调用,才会被GC回收。
正确做法应该在使用完变量后给他赋值NULL,使其被回收。

3、一维数组的元素可以是基本类型,也可以是引用类型。
声明:int []a;
初始化:a = new int [100];

赋值:1)、**int []a={1,2,3,4};(常用简写)**
2)、int [] a=new int[]{1,2,3,4};

4、一维数组常用的方法和技巧
a)foreach循环:for(Type variable:collection){
}
例如:定义了数组int a[];
for(int i:a){
}
之后就可以在循环体内用i代替a内数组元素了,但是只可读,不可写

b) a.length是数组的一个属性,可以产生数组长度,而在String中,length()是方法

c) arraySort()方法是快排,利用这个方法之前需要导入java.util.*;包

d) arraycopy()方法是用来拷贝数组的,有5个参数(from、fromIndex、to、toindex、 count) 拷贝源数组,拷贝源起点,拷贝目标数组,拷贝目标起点,个数。(也需 要导入java.util.arrays包)

e) copyof()方法有两个参数:一个是源复制数组,另一个是长度。
例: public static int[] copyOf(int []original,int nowLength);
数组长的话补0

5、二分查找方法(折半查找法)
a)手动二分查找;
设置三个变量:low,high,mid.
控制结束的标志是low<=high或找到目标值
代码如下:

/** * Created by zxchello on 2017/11/3. */import java.util.Arrays;public class array2 {    static int ArraySearch(int key,int []a){        Arrays.sort(a);        int hi=a.length-1;        int low=0;        while(low<=hi){            int mid=(low+hi)/2;            if(key<a[mid]){                hi=mid-1;            }else if(key>a[mid]){                low=mid+1;            }else{                return mid;            }        }        return -1;    }    public static void main(String[] args) {        int []a={1,4,2,7,8,9,11,6,44,23};        int res=ArraySearch(2,a);       for(int i:a){            System.out.print(i+" ");        }        System.out.println();        System.out.print(res);    }}

手动查询时如果查找 不到可以自己设置最终返回值

b)、利用二分方法自动查询
导入java.util.arrays包,调用arrays.binarySearch方法 ,传入数组,返回查找到的结 果索引值,

注意:使用二分法要先进行排序。
优点:比较次数少,查找速度快,平均性能好。
缺点:要求待查表为有序表,且插入删除困难。
适用于不经常变动而查找频繁的有序列表。
方法最后没找到查找内容的话,返回-(low+1);

原创粉丝点击