数组 

  数组
数组类型

不可重复

无序(线性查找)

可重复(找到第一个即可)

无序(线性查找)

不可重复

有序(二分查找)

可重复(找到第一个即可)

有序(二分查找)

插入 O(N)

O(1)

O(logN+N) O(logN+N)
查询 O(N) O(N) O(logN) O(logN)
删除(无洞) O(N) O(N) O(lonN+N) O(logN+N)
总结 可重复无序插入快、下标已知更新查找快;查找删除慢、大小固定 查找快;插入删除慢、大小固定
应用   员工表,雇用解雇不经常发生
java数组 无序、可重复;插入快、查询删除慢、大小固定;如果已知下标,更新查找快
ArrayList 大小可以扩展;但这是以牺牲效率为代价的
Vector 大小可以扩展;但这也是以牺牲效率为代价的

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 java 数组(无序、可重复)

已知下标查找更新快O(1)
String str = strs[1];
strs[1] = "花";

查找慢O(N)
int index = findChar("花", strs);
删除慢O(N)
deleteChar("花", strs);
中部插入慢O(N)
insertCharWithMiddle("兴", 1, strs);
大小固定

    public static void main(String[] args) {
        String[] strs = {"中", "华", "人", "民", "共", "和", "国", null, null, null, null};
        print(strs);
        // 已知下标查找更新快
        System.out.println(strs[1]);
        strs[1] = "花";
        print(strs);
        // 查找慢,需要花费O(N)的时间
        int index = findChar("花", strs);
        if (index == strs.length) {
            System.out.println("Can't find this char");
        } else {
            System.out.println("Find this char");
        }
        // 删除慢,需要花费O(N)的时间
        deleteChar("花", strs);
        print(strs);
        // 中部插入慢,需要花费O(N)的时间
        insertCharWithMiddle("兴", 1, strs);
        print(strs);
    }

    private static void insertCharWithMiddle(String str, int index, String[] strs) {
        for (int i = strs.length - 2; i >= index; i--) {
            strs[i + 1] = strs[i];
        }
        strs[index] = str;
    }

    private static void deleteChar(String str, String[] strs) {
        int index = findChar(str, strs);
        if (index != strs.length) {
            for (int i = index; i < strs.length - 2; i++) {
                strs[i] = strs[i + 1];
            }
            strs[strs.length - 1] = null;
        }
    }

    public static int findChar(String str, String[] strs) {
        for (int i = 0; i < strs.length; i++) {
            if (strs[i].equals(str)) {
                return i;
            }
        }
        return strs.length;
    }

    public static void print(String[] strs) {
        System.out.println(Arrays.asList(strs));
    }
View Code

相关文章: