java 容器
来源:互联网 发布:java 防止 sql注入 编辑:程序博客网 时间:2024/05/14 20:49
在java的容器类库中一共有两种类型:Collection和Map,他们的区别在于Collection只能存储单个元素,而Map是通过key-value的键值对存储元素。
通过查看源码可以发现,所有的java容器类都是可以自动调整自己的尺寸的。拿ArrayList来说吧,因为ArrayList底层是用数组实现的,那么我们不停的
往里面添加元素会不会使数组越界呢?当然不会,在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);
}
}
这样就可以保证数组在到达末尾的时候为数组扩容,从而达到调整尺寸,防止越界的目的。
Collection的子类有
List:以链的形式存储元素,它的之类有两个
ArrayList:擅长随机访问元素,但是插入、删除、移动元素效率较慢
LinkedList:插入、删除、移动元素方便,但是随机访问性较差
Vector
Set:每个值只能保存一个对象,不能含有重复的元素,它的子类有
HashSet:使用散列函数
TreeSet:使用红黑树
LinkedHashSet:使用链表结合散列函数
Queue:先进先出容器
Map的子类有
HashMap
HashTable:方法是Synchronize的
TreeMap
我们可以看到,其实容器类子类还是有不少的,那么我们在使用的时候到底如何选择呢?
在各个List中,最好的做法就是以ArrayList作为默认选择。只有当插入、删除频繁的时候,我们才选择LinkedList(),Vector总是比ArrayList慢,
所以我们很少在程序中看到使用Vector。在各个Set中,HashSet在插入,查找方面常常优于HashTree,只有当需要产生一个经过排序的序列,
才用TreeSet。HashTree的意义是用来维护其内元素的排序状态。在各个Map中,HashMap用于快速查找。当各个元素固定时,最好使用Array,
因为Array对于get()和set()效率是最高的。
值得注意的一点,Map中的key是Set,value是Collection,所以如果通过key遍历Map输出顺序不一定同存储顺序。
- Java容器:容器一览
- Java容器
- Java容器
- java容器
- java容器
- Java容器
- java容器
- JAVA容器
- JAVA 容器
- java 容器
- java容器
- java容器
- java容器
- JAVA容器
- java容器
- java 容器
- java容器
- JAVA 容器
- 创业公司铁律——“一个中心,两个基本点,四项基本原则,三个代表”
- android的notification的写法
- 4 随机现实图片特效
- 添加删除软件不能正常使用
- java 源码与API
- java 容器
- USACO Cowcycles 解题报告
- C# sql Server 项目数据库连接方式探讨
- crmsql查询用户登录信息
- 今日作息及食谱(8.2)
- PCB封装库命名规则
- 多叉树结构:JSON数据解析(一)
- 通过分布式存储和集群解决高性能高并发的要求
- diary of debug c u b e f 4 S P I