`
kayban
  • 浏览: 39237 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JDK源码学习笔记-ArrayList\Vector

阅读更多
1、ArrayList容量变化的规则
   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);
	}
    }

可以看出ArrayList扩容:(旧容量*3)/2 + 1,这样做的依据是什么?查资料也没找到答案,有知道的告诉下呗~
2、AyyayList指定位置的插入操作
    public void add(int index, E element) {
	if (index > size || index < 0)
	    throw new IndexOutOfBoundsException(
		"Index: "+index+", Size: "+size);
	ensureCapacity(size+1);  // Increments modCount!!
	[color=red]System.arraycopy(elementData, index, elementData, index + 1,
			 size - index);[/color]
	elementData[index] = element;
	size++;
    }

同理,删除操作remove(int index)也是做了一次这样的拷贝。
3、Vector容量变化规则
    private void ensureCapacityHelper(int minCapacity) {
	int oldCapacity = elementData.length;
	if (minCapacity > oldCapacity) {
	    Object[] oldData = elementData;
	    int newCapacity = (capacityIncrement > 0) ?
		(oldCapacity + capacityIncrement) : (oldCapacity * 2);
    	    if (newCapacity < minCapacity) {
		newCapacity = minCapacity;
	    }
            elementData = Arrays.copyOf(elementData, newCapacity);
	}
    }

当capacityIncrement变量大于0时则按照该变量值进行扩容,否则翻倍扩容(注意此处与ArrayList的区别)。
4、注意Vector中capacity()与size()的区别:
capacity()返回Vector当前容量;size()返回实际存储的元素长度。
5、Vector查重
public synchronized boolean retainAll(Collection<?> c)  {
        return super.retainAll(c);
    }

ArrayList同样拥有!
5、AbstractList中的equals()方法
ListIterator e2 = ((List) o).listIterator();

所以下面这段代码:
        ArrayList<Integer> temp1 = new ArrayList<Integer>();
        Vector<Integer> temp2 = new Vector<Integer>();
        
        Integer e1 = new Integer(1);
        Integer e2 = new Integer(2);
        
        temp1.add(e1);
        temp1.add(e2);
        
        temp2.add(e1);
        temp2.add(e2);
        
        if(temp2.equals(temp1)) {
            System.out.println("equals");
        }else {
            System.out.println("not equals");
        }

输出结果是“equals”!
分享到:
评论

相关推荐

    Java JDK 6学习笔记_pdf版(附课本代码)

    这份“Java JDK 6学习笔记”涵盖了从基础到高级的各种主题,是Java初学者和进阶者的重要参考资料。以下是笔记中可能包含的一些关键知识点: 1. **安装与配置**:介绍如何在不同操作系统(如Windows、Linux和Mac OS...

    本仓库记录了我的Java学习进阶之路,涵盖了Java基础、JDK源码、JVM中的重要知识,附有代码和博客讲解,旨在提供一个Java在线共享学习平台,帮助更多的Java学习入门者进阶 .zip

    作者目录Java基础Java基础学习(1)——引用Java基础学习(2)——注解Java基础学习(3)——泛型Java基础学习(4)——动态代理《Java多线程核心技术》读书笔记JDK源Java集合框架源码解读(1)——ArrayList、LinkedList和...

    java面试笔记.pdf

    - Vector在扩容时将容量翻倍,而ArrayList的扩容方式是增加约1.5倍的容量,这使得ArrayList在节约内存空间上表现更优。 - Vector可以设置capacityIncrement参数来控制容量的增长,而ArrayList没有这个功能。 - 为了...

    Java面试笔记-基础问题篇.docx

    ArrayList和Vector都是列表,但ArrayList线程不安全,效率较高;HashMap和Hashtable都是键值对存储,HashMap允许null键值,线程不安全。 22. **多线程**:Java提供了多种实现多线程的方式,如继承Thread类和实现...

    java8源码-JavaRobot:Java学习笔记,JavaLearningNote

    学习笔记(持续更新中) 所有文章均同步发布到微信公众号【JavaRobot】,关注微信公众号,及时得到文章推送,谢谢支持。 说明:如无特别说明,所有代码都基于JDK8 JavaSE(Java基础) Java Core 关键字 synchronized...

    清华妹子的Java仓库(进阶学习路线)

    Java集合框架源码解读(1)——ArrayList、LinkedList和Vector Java集合框架源码解读(2)——HashMap Java集合框架源码解读(3)——LinkedHashMap Java集合框架源码解读(4)——WeakHashMap Java集合框架源码解读

    我的java笔记

    - `Vector`类似于`ArrayList`,但其方法是同步的,适用于多线程环境。 以上就是从“我的Java笔记”中整理出来的知识点汇总,这些内容对于初学者来说非常实用,涵盖了从环境搭建到具体编程实践中的常见概念和技术点...

    马士兵J2SE第七章容器个人学习笔记.pdf

    - 线程安全性:两者都不是线程安全的,但在JDK 1.0中,`Vector`(`ArrayList`的前身)是线程安全的,性能相对较差。 【HashMap与HashTable的区别】 1. 线程安全:`HashMap`是非线程安全的,`HashTable`是线程安全的...

    java笔记.docx

    - **Vector类**: 类似于`ArrayList`,但线程安全。 - **LinkedList类**: 基于链表实现的列表接口实现类,适合频繁插入和删除操作。 #### 15. List类的子类特点 - **ArrayList**: 基于数组实现,查询快,不适合频繁...

    Java领域基础部分JavaSE笔记

    - `Vector`:线程安全的`ArrayList`。 #### 十、其他高级特性 ##### 8.1 类变量和类方法 - **类变量**:使用`static`修饰的成员变量。 - **类方法**:使用`static`修饰的成员方法。 ##### 8.2 main方法 - **定义*...

    Java基础笔记

    #### `ArrayList`、`LinkedList`、`Vector`的区别 - **`ArrayList`**:基于数组实现,非线程安全,扩展容量时按照`(旧容量 * 3 / 2) + 1`的规则。 - **`LinkedList`**:基于双向链表实现,非线程安全,适用于频繁的...

    java面试笔记整理,包含java,redis,kafka等

    - **JDK (Java Development Kit):** 包含了JRE以及开发Java应用程序所需的工具。 - **JRE (Java Runtime Environment):** 包含了运行Java应用程序所需的所有组件,包括JVM和标准类库。 - **JVM (Java Virtual ...

    java学习记录之类集框架

    与 ArrayList 不同,Vector 是线程安全的,但在多线程环境下,它的性能通常低于非同步的 ArrayList,因为每次操作都需要进行同步锁定。 **Set 接口** Set 接口不保证元素的顺序,且不允许有重复元素。常见的 Set ...

    2023版Java面试题.pdf

    2. Vector 和 ArrayList 的区别:Vector 是线程安全的,而 ArrayList 是线程不安全的。 3. Array 和 ArrayList 的区别:Array 是固定大小的,而 ArrayList 是可变大小的。 4. 如何实现数组和 List 转换?:可以使用 ...

    Java面试总结.pdf

    20. ArrayList和Vector的区别:Vector与ArrayList类似,也是基于动态数组实现的,但是Vector是线程安全的,因为它的大部分方法都是同步的,性能相对较差。 21. Array和ArrayList的区别:Array是Java语言中用于表示...

Global site tag (gtag.js) - Google Analytics