Java 映射的复杂度分析及更多关于映射的问题

版权声明:转载请随意! https://blog.csdn.net/qq_41723615/article/details/89283551

映射的时间复杂度分析:

下面对基于链表实现的映射与基于二分搜索树的映射做复杂度比较分析。

测试类:

import java.util.ArrayList;

public class Main {

    private static double testMap(Map<String, Integer> map, String filename){

        long startTime = System.nanoTime();

        System.out.println(filename);
        ArrayList<String> words = new ArrayList<>();
        if(FileOperation.readFile(filename, words)) {
            System.out.println("Total words: " + words.size());

            for (String word : words){
                if(map.contains(word)) {
                    map.set(word, map.get(word) + 1);
                }else{
                    map.add(word, 1);
                }
            }

            System.out.println("Total different words: " + map.getSize());
            System.out.println("Frequency of PRIDE: " + map.get("pride"));
            System.out.println("Frequency of PREJUDICE: " + map.get("prejudice"));
        }

        long endTime = System.nanoTime();

        return (endTime - startTime) / 1000000000.0;
    }

    public static void main(String[] args) {

        String filename = "pride-and-prejudice.txt";

        BSTMap<String, Integer> bstMap = new BSTMap<>();
        double time1 = testMap(bstMap, filename);
        System.out.println("BST Map: " + time1 + " s");

        System.out.println();

        LinkedListMap<String, Integer> linkedListMap = new LinkedListMap<>();
        double time2 = testMap(linkedListMap, filename);
        System.out.println("Linked List Map: " + time2 + " s");

    }
}

测试结果:

关于映射的更多问题:

有序映射与无序映射(key是否具有顺序性)

多重映射:键可以重复的映射。

集合与映射的关系:

集合与映射的实现实际上并没有太大的区别。完全可以基于集合实现映射或者基于映射实现集合。

基于集合实现映射:重定义集合元素为键值类型数据对,在新的数据对的情况下,比较的是key,而不是value。不过还需要添加一些方法。

基于映射实现集合:理解为映射的value为空的情况,不管是什么键,所对应的值都是为空的。

猜你喜欢

转载自blog.csdn.net/qq_41723615/article/details/89283551