版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/KLH_BAHK/article/details/88774857
集合与数组的区别
- 数组长度固定,集合长度可变
- 集合中存储的元素必须是引用数据类型
Vector,ArrayList,LinkedList的区别
- Vector,ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形式进行存储
- List中的元素有序、允许有重复元素;Set中的元素无需,不允许有重复元素
- Vector线程同步,ArrayList、LinkedList线程不同步
- LinkedList适合指定位置插入、删除操作,不适合查找(增删快,查询慢);ArrayList、Vector适合查找,不适合指定位置的插入、删除操作(增删慢,查询快)
- ArrayList在元素填满容器时会自动扩充容器大小的50%,而Vector则是100%,因此ArrayList更节省空间
HashTable,HashMap,TreeMap的区别
- HashTable线程同步,HashMap线程不同步
- HashTable使用Enumeration,HashMap使用Iterator
- HashTable不允许<键,值>有空值,HashMap允许<键,值>有空值
- HashTable中hash数组的默认大小是11,增加的方式为old*2+1,HashMap中hash数组的默认大小是16,增长方式一定是2的指数倍
- TreeMap能够把它保存的记录根据键排序,默认是按升序排序
HashMap是如何工作的
- HashMap是一个针对数据结构的键值,每个键值都会有相应的值,关键是识别这样的值
- HashMap基于hash原理,通过put方法和get方法储存和获取对象
- 存储键值对时,它调用键对象的hashCode方法来计算hashcode,然后找到bucket位置来存储值对象
- 获取键值对时,通过键对象的equals方法找到正确的键值对,然后返回值对象
- HashMap使用LinkedList来解决碰撞问题,当发生碰撞了,对象将会储存在LinkedList的下一个节点中
- HashMap在每个LinkedList节点中储存键值对对象
Iterator和ListIterator的区别
- ListIterator有add方法,可以向List中添加对象,而Iterator不能
- 都有hasNext和next方法,实现顺序向后遍历,ListIterator有hasPrevious和previous方法,实现逆向(顺序向前)遍历
- ListIterator可以通过nextIndex和previousIndex方法定位当前的索引位置,Iterator没有此功能
- 都可以实现删除对象,但ListIterator可以通过set方法实现对象的修改,Iterator只能遍历,不能修改
迭代器和枚举之间的区别
- Iterator允许移除从底层集合的元素
- Iterator的方法名是标准化的