集合相关知识点--待改进

版权声明:本文为博主原创文章,未经博主允许不得转载。 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的方法名是标准化的

猜你喜欢

转载自blog.csdn.net/KLH_BAHK/article/details/88774857
今日推荐