美文网首页Java基础
Java编程思想笔记16.数组

Java编程思想笔记16.数组

作者: 卢卡斯哔哔哔 | 来源:发表于2018-12-29 11:44 被阅读2次

    点击进入我的博客

    1 数组概述

    数组相对其他容器的优点
    1. 数组是效率最高的存储和随机访问对象引用序列的方式。
    2. 数组可以保存基本类型
    3. 数组可以真正持有某种具体类型
    数组是第一级对象
    1. 数组标识符只是一个引用,指向堆中的一个真实对象
    2. length是数组对象的一部分
    3. []是访问数组对象的唯一方式
    4. 数组中的对象会被默认初始化为null,值会被初始化为0
    返回数组

    Java中可以使用数组作为返回值

    多维数组
    1. 多维数组必须指定第一维的长度,其他维度可以指定也可以不指定
    2. 多维数组除第一维之外,其他维度可以有不同的任意长度

    2 数组与范型

    1. 不能实例化具有参数类型的数组
    2. 可以参数化数组本身的类型
    3. 可以创建范型数组的引用
    4. 可以把普通数组转型成范型数组
    public class Main {
        public static void main(String[] args) {
            A<String>[] arr1 = new A<String>[10]; // (1)error
            A<String>[] arr2; // (3)warning
            A<String>[] arr3 = (A<String>[]) new A[10]; // (4)
        }
    }
    
    class A<T> {
        // (2)
        T[] func() {
            return (T[]) new Object()[];
        }
    }
    
    范型容器是比范型数组更好的选择

    3 Arrays类的功能

    1. Arrays.fill():把全部或部分数组填充为某一个固定值
    2. Arrays.equals()Arrays.deepEquals():比较数组是否相等。数组相等的条件是数组长度相等,而且对应位置的元素也相等。
    3. Arrays.copy():底层调用的是System.arraycopy,用于复制数组,效率比for循环快的多。如果复制的内容是对象,那么只是复制了对象的引用(浅复制)。
    4. Arrays.binarySearch():对已排序的数组进行二分查找,如果数组未排序可能会无限循环。
    5. Arrays.sort():对数组中元素进行排序,只要数组中的元素实现了Comparable接口,或者提供一个Comparator。字符串的排序按照字典序进行排序,可以使用String.CASE_INSENSITIVE_ORDER来忽略大小写。
    public class Main {
        public static void main(String[] args) {
            Item[] arr = {new Item(3), new Item(5), new Item(4)};
            System.out.println(Arrays.toString(arr)); // [3, 5, 4]
            Arrays.sort(arr);
            System.out.println(Arrays.toString(arr)); // [3, 4, 5]
            Arrays.sort(arr, new Comparator<Item>() {
                public int compare(Item o1, Item o2) {
                    return o1.value == o2.value ? 0 : (o1.value > o2.value ? -1 : 1);
                }
            });
            System.out.println(Arrays.toString(arr)); // [5, 4, 3]
        }
    }
    
    class Item implements Comparable<Item> {
        public int value;
    
        public Item(int value) {
            this.value = value;
        }
    
        @Override
        public String toString() {
            return value + "";
        }
    
        public int compareTo(Item o) {
            return value == o.value ? 0 : (value > o.value ? 1 : -1);
        }
    }
    

    相关文章

      网友评论

        本文标题:Java编程思想笔记16.数组

        本文链接:https://www.haomeiwen.com/subject/muidlqtx.html