栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java关键知识点之集合框架

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java关键知识点之集合框架

汇总:Android小白成长之路_知识体系汇总【持续更新中…】

目录
  • 集合框架
  • ArrayList
  • linkedList
  • HashMap
  • HashSet

集合框架

-Set和List区别:

  • Set接口实例存储的是无序、不重复的数据,List存放的是有序、可以重复的数据
  • Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变
  • List和数组类似,可以动态增长,查找元素效率高,插入删除效率低,会引起元素位置改变
  • 只有Vector和HashTable是线程安全的,其他都是非线程安全的
ArrayList
  • ArrayList类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制
  • ArrayList中的元素实际上都是对象,因此无法直接把E类型变量写为基本数据类型,而应该使用它们的包装类
  • ArrayList是线程不安全的,建议在单线程中使用
  • ArrayList的默认大小是10,当容量不足时,会扩容,新的容量 = (原来容量*3)/2+1
linkedList
  • linkedList是一种双向循环链表,且头结点不存放数据
  • linkedList是线程不安全的,建议阿紫单线程中使用
  • linkedList支持从头遍历和从尾遍历,因此它的get方法做了优化,如果索引小于size/2,则从头遍历,否则从尾遍历
  • linkedList做插入、删除的时候,慢在寻址,快在只需要改变前后Entry的引用地址,ArrayList做插入、删除的时候,慢在数组元素的批量copy,快在寻址,所以,如果待插入、删除的元素是在数据结构的前半段尤其是非常靠前的位置的时候,linkedList的效率将大大快过ArrayList,但越是往后,ArrayList由于要批量copy的元素越来越少,操作速度必然追上乃至超过linkedList。不过一般情况下都是linkedList更快,毕竟ArrayList如果触发了扩容也是耗时操作
HashMap
  • HashMap由数组+链表组成,jdk1.8以后,当链表长度达到8,便会使用红黑树
  • HashMap.put(key,value)过程:
    • 获取key字符串的hashcode值
    • 经过HashMap中的hash函数,使得hash值更散列
    • 根据hash值确定存储的位置,若该位置没有元素,则直接插入,否则迭代该处元素链表并依次比较其key的hash值,如果两个hash值相等,则用新的value覆盖掉原来的,如果不等,则将该节点插入链表的表头,如果超过了8,则转为插入红黑树
  • HashMap的初始容量大小默认为16,当存储的元素个数超过容量乘以加载因子(默认0.75)的结果值,就会将数组容量变为原来的两倍,这个过程称为扩容,扩容时会生成一个新的数组,原来的所有数据将重新计算hash值重新分配到新数组中,非常耗时,因此创建hashMap时预设元素的个数能够有效地提高性能
  • HashMap允许key为null的形式存取,会将其放到第一个位置中,在存储时会对其做特殊处理
  • HashMap是线程不安全的,需要线程安全时可用使用HashTable
  • 重写对象的equals方法时,通常要同时重写它的hashcode方法,保证其返回相同的值,就是为了防止两个对象equals返回true,却由于hashcode不同,从而在HashMap中存放了两个对象
HashSet
  • HashSet是基于HashMap来实现的,是一个不允许重复元素的集合
  • HashSet也允许有null值
  • HashSet实现了Set接口, 仅存储对象,value值默认为Object对象
  • HashSet是线程不安全的
    仅存储对象,value值默认为Object对象
  • HashSet是线程不安全的
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/306425.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号