盒子
盒子
文章目录
  1. 数组
    1. 数组的基本性质
    2. 多维数组
    3. 数组与泛型
    4. 数组内容操作

Java数组与容器

数组

数组的基本性质

  • 数据与容器的主要区别
  • 效率,类型和保存基本类型的能力

    但自从泛型出现后,效率成为数组仅存的优势,因为数组时一个简单的线性序列,所以元素访问速度非常快

  • 数组的初始化
  • 数组标识符是一个引用,指向在堆中创建的一个真实对象(数组),这个对象(数组)用于保存指向其它对象的引用

    在数组正确初始化之前,编译器不允许用此引用进行任何操作

    新生成一个数组对象时看,其中所有引用被自动初始化为null,其中:

    1. 基本数值类型:0
    2. 字符型:(char)0
    3. 布尔型:false

    聚集初始化:

    1
    Object[] os=new Object[]{new Obj1(),new Obj2()}

    动态聚集初始化:

    1
    2
    3
    4
    Object[] os=new Object[5];
    for(int i=0;i<os.length;i++){
    os[i]=new Obj1();
    }

    多维数组

  • 将多维数组转换成String类型
  • 1
    System.out.println(Arrays.deepToString(as))

  • 粗糙数组
  • 数组中构成的举证的每个向量都可以具有任意长度

    1
    2
    3
    Object[][] objs=new Object[][]{
    {new Obj1()},{new Obj1(),new Obj2()}
    }

    注意,若创建多维数组行数必须确定,而行数不做要求

    1
    Object[][] oss=new Object[5][];

    数组与泛型

    参数化数组不能进行是实例化,但可以通过以下方式得到泛型数组对象:

    1
    2
    3
    List[] ls=new List[5];
    List<String> list;
    list=(List<String>)ls

    数组内容操作

  • 填充数组
  • 1
    2
    boolean[] bs=new boolean[5];
    Arrays.fill(bs,true);

    将同一值(true)填充满boolean数组

  • 复制数组
  • 1
    2
    3
    4
    Integer[] is1 ={1,2,3,4,5};
    Integer[] is2={6,7,8,9,10}
    arrayCopy(is1, 2, is2, 2, 2);
    System.out.println(is2.toString());

    {6,7,3,4,10}

    即从is1的3开始复制两个数3,4到is2(从8开始)8,9中

  • 数组的排序
  • 1
    2
    3
    4
    5
    6
    //按照词典编排顺序排序,大写字母开头在前
    Arrays.sort(strs);
    //反向排序
    Arrays.sort(strs,Collections.reverseOrder());
    //忽略大小写字母区分
    Arrays.sort(strs,String.CASE_INSENSITIVE_ORDER);

    可通过重写接口的compareTo方法进行自定义排序规则

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    import java.util.Arrays;
    public class Sorter implements Comparable<Sorter>{
    private int i;
    public Sorter(int i){
    this.i=i;
    }
    @Override
    public int compareTo(Sorter o) {
    if(i>o.i){
    return -1;
    }else if(i<o.i){
    return 1;
    }else{
    return 0;
    }
    // if(i>o.i){
    // return 1;
    // }else if(i<o.i){
    // return -1;
    // }else{
    // return 0;
    // }
    }
    public static final void main(String...args){
    Sorter[] sorters=new Sorter[]{new Sorter(1),new Sorter(8),new Sorter(2),new Sorter(6)};
    Arrays.sort(sorters);
    for(int x=0;x<sorters.length;x++){
    System.out.print(sorters[x].i+" ");
    }
    }
    }

    8 6 2 1

    若使用注释掉的代码,则会正序排序

  • 数组的查找
  • 1
    Arrays.binarySearch(strs,str);

    若找到返回该值所在位置,否则返回一个负数,该负数计算方法为:

    1
    - (插入点) - 1

    插入点表示若要维持有序状态,该插入值所应插入的位置

    支持一下
    扫一扫,支持Grooter
    • 微信扫一扫
    • 支付宝扫一扫