zoukankan      html  css  js  c++  java
  • ArrayList,LinkList,HashMap

     ArrayList底层实现数组,这是ArrayList get()方法的源码,底层是数组

    根据下标返回在数组中对应的位置 ,查询快,插入慢

    // Positional Access Operations
    
        @SuppressWarnings("unchecked")
        E elementData(int index) {
            return (E) elementData[index];
        }
    

    LinkList的底层实现是双向链表,插入块,查询慢 ,下面是其add()方法的源码

    可以看出是一双向链表的方式实现的 

    /**
         * Links e as last element.
         */
        void linkLast(E e) {
            final Node<E> l = last;
            final Node<E> newNode = new Node<>(l, e, null);
            last = newNode;
            if (l == null)
                first = newNode;
            else
                l.next = newNode;
            size++;
            modCount++;
        }
    

     HahsMap的底层实现是数组加链表  比如我new一个新的map Map<String,Integer> map=new HashMap<String,Integer>();

     调用put的方法添加,保存的原理是,new一个数组,得出key的hashCode()码,其实就是一串数字,将这个数字当坐下标,根据这个下标将其放到对应的

     位置。问题来了,key的hashCode()码可能会重复,所以,一个下标的位置上会放入几个不同的键值对,也即是map值,这样的话就用到了链表结构,

     之所以这么复杂还是为了提升性能,以为键值对无法像单纯的以数组实现的容器一样,那么方便的进行各种操作,这样可大大提高效率。

  • 相关阅读:
    合并两个有序链表
    有效括号方法二
    有效括号
    es6 中的模块化
    XMLHttpRequest 对象
    AST
    php读写文件方式
    vue开发中遇到的问题
    sublime操作
    cmd命令
  • 原文地址:https://www.cnblogs.com/sanduweiliangxtx/p/6016023.html
Copyright © 2011-2022 走看看