zoukankan      html  css  js  c++  java
  • 第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();

    
    
    
    
    
  • 相关阅读:
    linux内核编译
    字符设备驱动ioctl实现用户层内核层通信
    Linux内核完全剖析基于0.12内核
    KVM分析报告
    kvm的vmcall
    kvm源代码分析
    KVM基本概念
    linux系统调用
    UML的9种图例解析(转)
    SurfaceView的基本使用(转)
  • 原文地址:https://www.cnblogs.com/rookiechen/p/5707635.html
Copyright © 2011-2022 走看看