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”!
分享到:
相关推荐
开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8...
Java JDK 8学习笔记-2015年版-带书签,影印版,高清晰度。
jdk-8u60-windows-i586 jdk-8u60-windows-i586 jdk-8u60-windows-i586 jdk-8u60-windows-i586 jdk-8u60-windows-i586
良葛格Java JDK 5.0 学习笔记 - 文字编辑器制作
《Java JDK7学习笔记》是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习java时遇到的概念、操作、应用或认证考试等问题及解决方案。《Java JDK7学习笔记》针对java se 7新功能全面改版,无论是章节架构...
jdk1.8 jdk-8u5-windows-i586 32位官方正式版 jdk1.8 jdk-8u5-windows-i586 32位官方正式版
Centos7离线安装文件 jdk-8u231-linux-x64.tar.gz压缩包 免费下载,现在博客都是付费文件,搞得头大,现在免费分享
bcprov-jdk15on-1.64.jar bcprov-jdk15on-1.64-sources.jar bcprov-jdk15on-1.64-sources.jar.src.zip
jdk8安装包: jdk-8u202-windows-x64
jdk-7u80-windows-x64.exe
jdk-7u80-linux-x64.tar.gz
bcprov-jdk15to18-1.72.jar
jdk-8u40-linux-x64.rpm
jdk-8u40-linux-x64.gz
jdk-7u80-windows-x64.exe 【官方下载的jdk1.7、jdk7,windows 64位版】
jdk-8u101-windows-x64.exe 最新版JDK For windows x64
jdk-7u40-windows-x64-demos.zip
jdk-8u60-linux-x64.tar.gz
jdk-7u80-windows-x64.exe的压缩包,jdk1.7、版本 jdk-7u80、Windows64位操作系统
jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe java编译环境