现在的位置: 首页 > 综合 > 正文

第五章:数组及常用算法

2013年11月06日 ⁄ 综合 ⁄ 共 1920字 ⁄ 字号 评论关闭

 

1. 数组:一组相同数据类型的存储结构。

2. 声明:数据类型[] 数组变量名;

3. 创建:数组变量名 = new 数据类型[长度];
   也可以把数据的声明和创建合为一步:数据类型[] 数组变量名 = new 数据类型[长度];
   数组一旦创建,它的长度无法改变。
  
4. 数组的默认初始化:数组在创建时,会使用对应类型的默认初始化值对数组中的所有元素进行初始化。

5. 数组中元素的访问:使用下标(索引)。语法:数组变量名[下标值];
  数组的下标是从0开始的,最后一个元素的下标就是:数组的长度-1。
  
6. Java语言为数组提供了一个length属性,用来访问数组的长度。
    int length = arr == null ? 0 : arr.length;
   
7. 显式初始化:数组变量名[下标值] = 值;

8. 静态初始化:数组的声明、创建和赋值合为一步:
    数据类型[] 数组变量名 = new 数据类型[]{值1,值2,..,值n};
    数据类型[] 数组变量名 = {值1,值2,..,值n};

9. jdk1.5以上版本新增功能:增强的for循环:for-each
 用途:用来遍历数组或集合。
 语法:for(数据类型 临时变量名 : 数组变量名){  }
 不足之处:没有数组的下标值。只能显示值,不能修改。也可能会出现NullPointerException。
 
10. 命令行参数:程序的入口方法main需要一个String类型的数组,这个数组的值是通过java.exe执行这个程序时添加在命令行后面。
    Eclipse工具怎么给它传命令行参数。
   
11. 可变参数,用来代表0到任意个的同类型参数。
 语法:数据类型... 参数名
 实质:可变参数其实就是一个数组。
 使用注意:可变参数必须是方法的最后一个参数。
 
12. 常用算法
 1)递归:方法内部出现有条件的自我调用。要有递归出口,要改条件,逐步向出口逼近。
 2)排序:冒泡bubbleSort --> 每轮两两比较,把最大值放置在最右。
           选择selectSort --> 每轮选中最小值,(打擂台)。
           插入insertSort --> 按顺序把每个元素放置到前面元素之间。(玩扑克牌时抓牌)
           快速quickSort --> 找轴心,分部分排序。
  3)查找:顺序sequenceSearch --> 挨个询问,直接找到为止。
           二分binarySearch   --> 对排好序的数组进行折半查找。
          
13. 数组的操作工具类:java.util.Arrays类,这个类提供的全是静态方法
  1) public static String toString(int[] arr): 返回指定数组内容的字符串表示形式
  2) public static void sort(int[] arr):对指定的数组按数字升序进行排序,采用的是最速排序。
  3) public static int binarySearch(int[] arr, int key):从指定数组中查找指定key出现的索引,若未找到,返回小于0的值。
  4) public static <T> List<T> asList(T... a): 把数组转换成List
     示例:
     Object[] objs = new Object[10];
     List<Object> list = Arrays.asList(objs);
  5) public static void fill(int[] a, int val): 将指定的 int 值分配给指定 int 型数组的每个元素。
 
14. 二维数组:数组的数组。二维数组的第一维中的元素也是数组。
    声明:数据类型[][] 数组变量名;
    创建:数组变量名 = new 数据类型[第一维长度][第二维长度];
          数组变量名 = new 数据类型[第一维长度][];
    静态初始化:
      数据类型[][] 数组变量名 = { {值1,值2,值3}, {值1,值2}, {值1,值2,值3}};
    访问二维数组中的元素:
      第一维中的元素:数组变量名[下标];
      第二维中的元素:数组变量名[下标][下标];
    二维数组的长度:数组变量名.length;  -->第一维的长度
                    数组变量名[下标].length; -->第二维的长度
    会遍历二维数组:for,for-each

 

15. 数据的复制:System类提供一个静态方法arraycopy(源数组,起始下标,目标数组,起始下标,要复制的元素个数); 它是一个本地方法,效率比较高。

    在jdk1.6以上版本,在Arrays类中也提供了数组复制功能方法。

抱歉!评论已关闭.