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学习笔记”涵盖了从基础到高级的各种主题,是Java初学者和进阶者的重要参考资料。以下是笔记中可能包含的一些关键知识点: 1. **安装与配置**:介绍如何在不同操作系统(如Windows、Linux和Mac OS...
作者目录Java基础Java基础学习(1)——引用Java基础学习(2)——注解Java基础学习(3)——泛型Java基础学习(4)——动态代理《Java多线程核心技术》读书笔记JDK源Java集合框架源码解读(1)——ArrayList、LinkedList和...
- Vector在扩容时将容量翻倍,而ArrayList的扩容方式是增加约1.5倍的容量,这使得ArrayList在节约内存空间上表现更优。 - Vector可以设置capacityIncrement参数来控制容量的增长,而ArrayList没有这个功能。 - 为了...
ArrayList和Vector都是列表,但ArrayList线程不安全,效率较高;HashMap和Hashtable都是键值对存储,HashMap允许null键值,线程不安全。 22. **多线程**:Java提供了多种实现多线程的方式,如继承Thread类和实现...
学习笔记(持续更新中) 所有文章均同步发布到微信公众号【JavaRobot】,关注微信公众号,及时得到文章推送,谢谢支持。 说明:如无特别说明,所有代码都基于JDK8 JavaSE(Java基础) Java Core 关键字 synchronized...
Java集合框架源码解读(1)——ArrayList、LinkedList和Vector Java集合框架源码解读(2)——HashMap Java集合框架源码解读(3)——LinkedHashMap Java集合框架源码解读(4)——WeakHashMap Java集合框架源码解读
- `Vector`类似于`ArrayList`,但其方法是同步的,适用于多线程环境。 以上就是从“我的Java笔记”中整理出来的知识点汇总,这些内容对于初学者来说非常实用,涵盖了从环境搭建到具体编程实践中的常见概念和技术点...
- 线程安全性:两者都不是线程安全的,但在JDK 1.0中,`Vector`(`ArrayList`的前身)是线程安全的,性能相对较差。 【HashMap与HashTable的区别】 1. 线程安全:`HashMap`是非线程安全的,`HashTable`是线程安全的...
- **Vector类**: 类似于`ArrayList`,但线程安全。 - **LinkedList类**: 基于链表实现的列表接口实现类,适合频繁插入和删除操作。 #### 15. List类的子类特点 - **ArrayList**: 基于数组实现,查询快,不适合频繁...
- `Vector`:线程安全的`ArrayList`。 #### 十、其他高级特性 ##### 8.1 类变量和类方法 - **类变量**:使用`static`修饰的成员变量。 - **类方法**:使用`static`修饰的成员方法。 ##### 8.2 main方法 - **定义*...
#### `ArrayList`、`LinkedList`、`Vector`的区别 - **`ArrayList`**:基于数组实现,非线程安全,扩展容量时按照`(旧容量 * 3 / 2) + 1`的规则。 - **`LinkedList`**:基于双向链表实现,非线程安全,适用于频繁的...
- **JDK (Java Development Kit):** 包含了JRE以及开发Java应用程序所需的工具。 - **JRE (Java Runtime Environment):** 包含了运行Java应用程序所需的所有组件,包括JVM和标准类库。 - **JVM (Java Virtual ...
与 ArrayList 不同,Vector 是线程安全的,但在多线程环境下,它的性能通常低于非同步的 ArrayList,因为每次操作都需要进行同步锁定。 **Set 接口** Set 接口不保证元素的顺序,且不允许有重复元素。常见的 Set ...
2. Vector 和 ArrayList 的区别:Vector 是线程安全的,而 ArrayList 是线程不安全的。 3. Array 和 ArrayList 的区别:Array 是固定大小的,而 ArrayList 是可变大小的。 4. 如何实现数组和 List 转换?:可以使用 ...
20. ArrayList和Vector的区别:Vector与ArrayList类似,也是基于动态数组实现的,但是Vector是线程安全的,因为它的大部分方法都是同步的,性能相对较差。 21. Array和ArrayList的区别:Array是Java语言中用于表示...