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);