java中map 为什么速度快

解决方案 »

  1.   

    map是根据键值对直接取的
    根据键去获取值 自然就快了啊
      

  2.   

    map最快
    根据键值对 查找 快另外给你介绍个 关于MAP的文章http://www.oracle.com/technology/global/cn/pub/articles/maps1.html
      

  3.   

    map、set、list是三类不同的容器大类,他们各自都有若干种不同的实现,由于其功能特性、背后的算法、采用的数据结构不同等因素,使得其不同实现对应不同的需求都有各自不同的优点,比如list的两个实现LinkedList和ArrayList,前者实现基于链表,后者是基于数组的,所以add方法进行随机插入时前者速度将优于后者,而默认在末尾添加元素和随机访问,则是后者性能上优于前者,所以说单纯说两个容器谁快谁慢是不严谨的,要根据实际使用情况来看。
      

  4.   


    我不知道LZ是问哪方面快 不过HASHMAP速度基本应该跟ARRAYLIST一样 因为他本身也是用数组实现的 查找的话他最快(跟ARRAYLIST差不多吧)
    但是我还是不知道LZ到底在问哪方面的东西..
      

  5.   

    错了一个数量级。ARRAYLIST是个一维数组,HASHMAP是二维(一个一维数组,数组里面的值是个链表)的。正解。所以,虽然HASHMAP是二维的,但是由于HASH算法,平均情况下的算法复杂度不是O(n),而是O(n*log n)。
    下面是HashMap的get方法    public V get(Object key) {
            if (key == null)
                return getForNullKey();
            int hash = hash(key.hashCode());
            for (Entry<K,V> e = table[indexFor(hash, table.length)];
                 e != null;
                 e = e.next) {
                Object k;
                if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
                    return e.value;
            }
            return null;
        }
    它先通过indexFor方法定位自己在table里面可能的位置,indexFor的实现是:    static int indexFor(int h, int length) {
            return h & (length-1);
        }这里h是hash值,位与length-1后的值,就是它在table里可能的位置了。该位置可能有多个值,所以要有个for循环,不断的e = e.next,知道找到想要的e.value为止。这篇东西好像没有什么信息量。提到TreeSet和TreeMap时说用二叉树排序。这说法值得商榷。实际上是基于红黑树,实现SortedMap接口。红黑树是自平衡二叉查找树,在我看来存在的意义,不是主要用来排序,而是可以在O(log n)时间内做查找,插入和删除。
    所以,“Java所有‘存储及随机访问一连串对象’的做法,array是最有效率的一种。”,这说法太笼统了。本来,那实现List<E>和Map<K,V>的类做比较,意义不大。
    Map<K,V>存取以K为键,“访问一连串对象”非其所长。
      

  6.   

    map、list、set三者的区别联系
      

  7.   


    嘿嘿。我喜欢Java的一个重要原因就是,java.util的存在,和学过的数据结构都联系得起来。
    不像C和C++,什么都要自己来,累死。
      

  8.   

    如果是遍历 肯定array最快
    hash取值么 map咯