第16章——数组

一、数组的优点、缺点

     优点:①   缺点:①、②、③

二、代替数组的容器

三、数组初始化的三种方法

     分清:普通聚合初始化和动态聚合初始化

四、与C++相比JAVA数组在方法中传递的优点

五、多维数组的创建

     ①、直接创建 ②、动态定义其他维的程度 ③、利用Arrays.deepToString()

六、利用Arrays.fill()测试数组

七、利用生成器填充数组

八、Arrays类的三种方法

     ①、arrayCopy()  ②、fill()  ③、equals()

九、数组的比较  comparable接口

十、数组的排序   Arrays.sort()方法

十一、数组的查找

 

 

 

回答:

1、优点:效率相对于容器非常快

     缺点:1、数组的长度是固定的   2、无法自动装箱和自动拆箱(就是int与Integer无法互相装转换)   3、无法使用泛型数组

2、利用ArrayList()来代替数组

3、三种方法:

private int[] data = new int[5];
方法一
//聚合初始化
private int[] data = {1,3,5,7,9};
方法二
//动态聚合初始化
private Integer[] data = new Integer[]{1,3,5,7,9}; 
方法三

解:聚合初始化和动态聚合初始化的区别

public static void test(Integer[] data){
   for(int i=0; i<data.length; ++i){
     System.out.println(data[i]+"");  
   }  
}

public static void main(String[] args){

  //test({1,3,5,7,9});运用聚合初始化是错误的
  test(new Integer(1,3,5,7));//正确

}
区别

4、java与c++

在c++中传递给方法的是数组的头指针,如果进行复杂的调用,容易发生内存泄漏的问题。

但是java有垃圾回收机制,可以很轻易的在方法中传递数组对象。

5、创建多维数组

private Integer[][] data = new Integer[5][5]();
创建

动态定义多维数组

private Integer[][] data = new Integer[5][];

public static void main(String[] args){
  //填充二维数组
  for (int i=0; i<data.length; ++i){
    data[i] = new Integer[5];
  }
}
动态定义

使用Array.deepToString():作用将多维数组转化为String

private static Integer[][] mData ={{1,2,3,4,5},{6,7,8,9,10}};
public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println(Arrays.deepToString(mData));
}

//输出:[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
deepToString

6、利用Array.fill()测试数据:将一维数组全部填充为一个类型的数据

private static Integer[] mData =new Integer[5];
public static void main(String[] args) {
    // TODO Auto-generated method stub
    Arrays.fill(mData, 731);
    for(int i=0; i<mData.length; ++i){
        System.out.print(mData[i]+"  ");
    }
}
fill

7、生成器填充数组(策略模式)

步骤1、创建接口   2、继承接口创建生成器 3、调用生成器

①、

public interface Generic<T> {
    T next();
}
Generic

②、

public class IntegerGeneric implements Generic<Integer>{
    private Random random = new Random();
    @Override
    public Integer next() {
        // TODO Auto-generated method stub
        return new Integer(random.nextInt(100));
    }
}
IntegerGeneric

③、

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        test(new IntegerGeneric(), 10);
    }

    public static void test(Generic<?> generic,int size){
        for (int i=0; i<size; ++i){
            System.out.print(generic.next()+"  ");
        }
    }
}
Main

8、Arrays类的方法的使用

arrayCopy():将一个数组的内容复制到另一个数组中。

public static void arraycopy(Object src,
                             int srcPos,
                             Object dest,
                             int destPos,
                             int length)
src:源数组;	srcPos:源数组要复制的起始位置;
dest:目的数组;	destPos:目的数组放置的起始位置;	length:复制的长度。
注意:src and dest都必须是同类型或者可以进行转换类型的数组.(int不可与Integer进行转换)

equals():判定两个数组是否相同

equals(Object[] obj1,Object[] obj2);

9、数组的比较

步骤1、对象继承Comparable接口 重写 compareTo()方法

步骤2、当重写了该方法之后,就可以使用Arrays.sort()对数组进行排序

步骤3、当排序完成之后,就可以对该数组进行二分法查询Arrays.binarySearch();

 

 

 



 

posted @ 2016-07-26 15:25  技术丶从积累开始  阅读(212)  评论(0编辑  收藏  举报