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值,这样的话就用到了链表结构,

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

  • 相关阅读:
    netty(4)高级篇-Websocket协议开发
    netty高级篇(3)-HTTP协议开发
    netty中级篇(2)
    netty入门篇(1)
    nio简介
    总账科目如何添加自定义属性?
    如何切换组织初次打开界面时,默认显示财务组织?
    超好用的免费Redis客户端
    Postman如何测试Webservice接口?
    创建Maven project 提示pom.xml 首行错误
  • 原文地址:https://www.cnblogs.com/sanduweiliangxtx/p/6016023.html
Copyright © 2011-2022 走看看