由于公司最近要招聘java项目经理,面试了好几个工作了7年以上的应聘人员,当时问到java集合时,涉及到其中原理,没有几个能说清楚的.由于公司对项目经理要求比较高,对代码评审能全盘把握.所以涉及到的java问题比较多.其实作为一个工作了好几年的java的技术人员或者项目经理,对java的基础理应比较熟悉.正好自己也整理下集合中几个常用的类,希望大家发表意见.
在java的集合中比较常用的的是list接口,实现list接口最常用的为Arraylist,LinkList,Vector等.下面分别介绍下.
ArrayList是比较常用的数据,创建一个对象为:ArrayList array=new ArrayList();ArrayList内部实现为:
public ArrayList(int initialCapacity) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
}
public ArrayList() {
this(10);
}
由上面代码可以得知ArrayList创建对象时为一个长度为10的数组,可以得知,ArrayList为数组结构,初始化长度为10.
ArrayList基本方法:
add(E)
往数组中增加对象,首先想到的是在已有数组长度加1,但是如果数组长度超出旧数组长度会是上面情况,通过查看源代码可以得知,如果新增加一个对象,数组长度超出原来数组长度,数组将会变成int newSize = (oldSize * 3)/2 + 1长度的数组;每次增加元素时,数组都要检查数组长度是否超出范围,如果超出范围就通过ensureCapacity(int minCapacity)方法扩展数组长度,在通过Arrays.copyOf方法生成新数组。
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中还增加了add(index,E)方法,arraylist允许在指点位置插入对象,首先要判断index是否在数组范围之内,
public void add(int index, E element) {
if (index > size || index < 0)
throw new IndexOutOfBoundsException(
"Index: "+index+", Size: "+size);
ensureCapacity(size+1); // Increments modCount!!
System.arraycopy(elementData, index, elementData, index + 1,
size - index);
elementData[index] = element;
size++;
}
从代码中可以看出,首先要检查长度,和add(E)方法一样,然后把数组往后移动一位。
remove(E)
remove(E)为指点删除arraylist中的对象,如果E为null则遍历数组,查询数组是否为null,如果为null通过fastRemove方法删除数组,如果E不为null则直接通过equals判断对象,再删除。 在删除元素时,并不会减少数组容量,如果想减少数组容量,可以通过equals方法。
get(index)
get方法内部实现比较简单,先检查index是否在数组范围内,再返回对象。
contains(o)
判断arraylist中是否包含某个对象,contains分两不处理,第一步如果o为null,循环查找arraylist中,查看是否包含null的对象如果包含返回结果;第二步o不为null情况,循环查找arraylist对象,通过equals比较,返回结果。
其他:
- ArrayList内部结构为数组,容量可以无限制增加
- ArrayList为非程安全
后面我再对list和map的几个常用类进行性能比较.看看在高并发下应该用那些类
分享到:
相关推荐
泛型集合12.3.4 泛型集合泛型的场景:定义泛型:12.3.5 Colletions工具类 12.3.4 泛型集合 ...import java.util.ArrayList; import java.util.LinkedList; public class TestBasicGeneric { public s
ArrayList是常用的一种java集合,在开发中我们常常需要从ArrayList中删除特定元素。有几种常用的方法: 朴实的方法,使用下标的方式: ArrayList<String>al=new ArrayList(); al.add("a"); al.add("b"); ...
集合类4.1 集合的实现类4.1.1 ArrayList 4.1.2 LinkedList 4.1.3 Vecotor4.1.4 HashSet 4.1.5 LinkedHashSet 4.2 Conllections工具类5. 集合的遍历5.1 迭代器5.2 增强for循环(jdk1.5+)* 附加知识点1.数据结构1.1 栈...
在尽可能短的篇幅里,将所有集合与并发集合的特征,实现方式,性能捋一遍。适合所有”精通Java”其实还不那么自信的人阅读。 不断更新中,请尽量访问博客原文。 List ArrayList 以数组实现。节约空间,...
为什么使用集合? 开发中会使用大量相同数据类型的情况,如果使用数组来解决...Java中集合的【总接口】Collection,Java中所有和集合有关的内容都是 Collection接口的子类或者实现类 interface Collection包含: int
1. 集合 1.1 为什么使用集合 开发中会使用大量相同数据类型的情况。如果使用数组来解决问题 1. 数组能够使用的方法非常少,功能方法需要程序员自己完成。 2. 数据类型单一化,不支持多种情况。 3. 数组容量不可以...
集合 层次一:针对不同特点的数据,能够选择对应接口的主要的类进行实例化和方法的调用 层次二:熟悉接口的不同的实现类... |—–ArrayList/LinkedList/Vector |—–Set:存储无序的、不可重复的数据: 高中的集合
在使用Java的时候,我们都会遇到使用集合(Collection)的时候,但是Java API提供了多种集合的实现。...–ArrayList Collection<–List<–LinkedList Collection<–Set<–HashSet
Java List高频ArrayList和LinkedList的区别?分别用在什么场景?常见少见Java Set常见Set是有序的,这句话对吗?Java Map高频hashtable和hashmap的区别及实现原理,请你说明HashMap和Hashtable的区别?HashMap 和 ...
Java的类集框架可以使程序处理对象的方法标准化,使用迭代方法访问类集可以使对类集的操作效率更加高。被设计成类集框架的拥有以下几种特性: ...–ArrayList Collection<–List<–LinkedList
Asp.net地址转义(分析)加强版 Web的桌面提醒(Popup) Using the Popup Object Click button only once in asp.net 2.0 Coalesys PanelBar + R.a.d Treeview +Xml 构建的Asp.net 菜单和权限管理模块 突破屏蔽限制...