Java中的容器 ArrayList
学习、使用java中的容器,应改了解以下这些问题
1,容器的作用
2,与其它容器的区别
3,知识点
先说一:(作用是简单的,到处都能看到,不详说)
首先要知到容器的作用,知到了作用才能开始使用它,首先我们应改知到ArrayList是一个容器,你可以往里边
放任何的object(object的意思就使说基础类型不行了,不过可以放基础类型对应的类).所以当你有很多对象
须要保存的时候,可以选择它)
二:这个是比较总要的,因为学会使用一个容器是很容易的,恰当的使用才是重要的。
对比Hashet ArrayList LinkedList
这些都是比较常见的,在什么情况下选择哪个呢,那首先了解一下他们的实现
HashSet基于HashMap的,HashMap是利用hash表实现的一个key-value的映射
LinkedList是基于链表的。
ArrayList是基于数组的
优点 缺点
HashSet 保正无重复,随机读取快 插入时消耗大,无序
ArrayList 插入快,按照index读取快 删除或者无序插入慢
LinkedList 插入,删除快 随机读取慢
知到了上边的这些,那么我们就可以来选择了。根据自己的需求,选择相应的容器
三:每个类库的使用,都有一些须要注意的地方,用的好了能够优化性能。首先看一下ArrayList的实现
实现里边有个重要的函数,就使在长度不够的时候的扩充和无参构造函数
public ArrayList() {
this(10);
}
无参构造函数告诉我们,默认ArrayList的长度是10个
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;
elementData = (E[])new Object[newCapacity];
System.arraycopy(oldData, 0, elementData, 0, size);
}
}
扩充函数告诉我们扩充的算法是(oldCapacity * 3)/2 + 1
同时,如果我们在使用ArrayList的时候知到了须要存放的对象的个数,在初始化ArrayList的是否,不妨加上
参数new ArrrayList(200);这样,ArrayList不许要一次次的扩充,一次次的拷贝,对性能提高是有帮助的。
然後看到jdk1.5中添加的新东西,其实应改不算新了。很像c++中的template
jdk1.5中加入了泛型,如下使用。
ArrayList<String> strList = new ArrayList<String>();
另外如果想更深入的了解泛型,候捷有一篇文章,讲的很详细
google 候捷 jdk1.5 泛型 就能找到