惠州营销网站建设公司,酒托做哪个网站好,商品关键词优化的方法,网站如何做301重定向List接口常用的实现类有3个#xff1a;ArrayList、LinkedList、Vector。 那么它们的特点和底层实现有哪些呢#xff1f; ArrayList特点和底层实现 ArrayList底层是用数组实现的存储。 特点#xff1a;查询效率高#xff0c;增删效率低#xff0c;线程不安全。我们一般使用… List接口常用的实现类有3个ArrayList、LinkedList、Vector。 那么它们的特点和底层实现有哪些呢 ArrayList特点和底层实现 ArrayList底层是用数组实现的存储。 特点查询效率高增删效率低线程不安全。我们一般使用它。 图1 查看源码我们可以看出ArrayList底层使用Object数组来存储元素数据。所有的方法都围绕这个核心的Object数组来开展。 ArrayList是可以存放任意数量的对象数组长度是有限的那么是怎么实现的呢 本质上就是通过定义新的更大的数组将旧数组内容拷贝到新数组来实现扩容。 ArrayList的Object数组初始化长度为10如果我们存储满了这个数组需要存储第11个对象就会定义新的数组长度长度更大的数组并将将原数组内容和新的元素一起加入到新数组中源码中代码如下 public void ensureCapacity(int minCapacity) { modCount; int oldCapacity elementData.length; if (minCapacity oldCapacity) { Object oldData[] elementData; int newCapacity (oldCapacity * 3)/2 1; if (newCapacity minCapacity) newCapacity minCapacity; // minCapacity is usually close to size, so this is a win: elementData Arrays.copyOf(elementData, newCapacity); } } LinkedList特点和底层实现 LinkedList底层用双向链表实现的存储。 特点查询效率低增删效率高线程不安全。 双向链表也叫双链表是链表的一种它的每个数据节点中都有两个指针分别指向前一个节点和后一个节点。 所以从双向链表中的任意一个节点开始都可以很方便地找到所有节点。 每个节点都应该有3部分内容 class Node { Node previous; //前一个节点 Object element; //本节点保存的数据 Node next; //后一个节点 } 我们查看LinkedList的源码可以看到里面包含了双向链表的相关代码 图2 注entry在英文中表示“进入、词条、条目”的意思。在计算机英语中一般表示“项、条目”的含义。 Vector向量 Vector底层用数组实现的List相关的方法都加了同步检查因此“线程安全,效率低”。 比如indexOf方法就增加了synchronized同步标记。 【图3】Vector的源码(indexOf方法) 建议 如何选用ArrayList、LinkedList、Vector? ·线程安全时用Vector。 · 局部变量不存在线程安全问题时并且查找较多用ArrayList一般使用它 ·局部变量不存在线程安全问题时增加或删除元素较多用LinkedList。