Java集合知识
2021/7/17 1:05:37
本文主要是介绍Java集合知识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本文介绍Java集合接口,接口实现类的内容,接口实现类(底层数组)扩容机制,使用场景;
1.接口图解
集合里面储存的都是对象,不存储基本数值类型,我们所看到的基本数据类型,都是装箱的结果(自动装箱);
Collection接口:List接口和Set接口的父接口;储存无序不唯一的对象;
List接口:List简称列表,储存有序不唯一的对象,有序是指对象插入顺序与遍历时看到的顺序相同的;不唯一是因为列表里面的元素可以重复;
Set接口:Set简称集,储存无序唯一的对象,无序是指对象插入的顺序与遍历看到的顺序不同,唯一是因为set要求元素有且仅有一个,不允许重复;
List接口实现内容:
ArrayList:存储无序不唯一对象,允许有null,底层是数组,查询速度快,插入删除慢,线程不同步,线程不安全,
LinkedList:储存无序不唯一对象,允许有null,底层是双向链表,插入删除快,查询慢,线程不同步,线程不安全,
vector:现在很少使用,基本上都是用ArrayLIst,线程同步,线程安全;
Set接口实现类:
HashSet:允许有null,元素唯一,插入顺序与遍历顺序不同,根据哈希码决定储存数据的顺序,底层是HashMap,线程不同步,线程不安全,有扩容机制;
系统默认的比较两个对象是否是同一个对象,判断的过程:第一步比较hashCode,如果hashCode不相同,则不进行后面的比较,第二步:第一步是true,将比较内存地址是否相同;默认的hanshCode值是内存地址根据一定的计算得到的结果;肯定有人会说既然哈希码与内存地址有关系,那直接比较哈希码就能说明是不是同一个对象,数学很有魅力的地方之一就在这里,也许内存地址不同也能算出相同的哈希码,这样的可能是存在的;一般我们会根据业务逻辑重写equals方法和hashCode方法;从上面系统默认的计算哈希码的结果可以看出来,两者都用到了内存地址;equals方法和hashCode方法存在这样的关系,即两者使用的变量需要保持一致;
TreeSet:不允许有null,不允许重复,实现了SortedSet接口,底层是TreeMap,二叉树结构,中序遍历(左根右)(树的遍历方法之一),存储顺序 1.自然排序(装箱以后的基本数据类型)2.比较器排序(Comparator或者Comparable);
LinkedHashSet:插入顺序即储存顺序,不允许重复,允许有null,底层是数组和链表,线程不安全;
Map接口实现类:Entry<key,value>
HashMap:底层是数组+链表混合体(哈希数据结构),允许一个键为null,线程不安全,如果有哈希冲突,则使用散列链表形式将所有的元素串起来;
TreeMap:底层是红黑树,实现SortedMap接口;
HashTable:底层是数组+链表混合体(哈希数据结构),继承Dictionary类,键值均不允许有null,线程安全;
扩容,即当前集合能容纳的数量达到一个饱和状态(饱和状态与加载因子有关)之后,集合需要申请新的空间;
需要扩容的集合一般都是基于底层是数组实现的,链表不涉及扩容问题;
LinkedList,TreeSet,TreeMap这类底层数据结构离散(链表,红黑树)的集合容器,不存在扩容一说,没有初始化大小,没有扩容机制,新增元素时,会直接为新元素动态分配内存;
ArrayList
底层数组,默认容量:0(在jdk1.8以前是10),加载因子:1,扩容增量:增量是原来容量的0.5倍,即扩容以后的容量是原容量的1.5倍;
Vector
底层数组,默认容量:10,加载因子:1,扩容增量:增量是原容量的1倍,即扩容以后的容量是原容量的2倍;
HashSet
底层是HashMap,默认容量:16,加载因子:0.75,扩容增量:容量达到总容量*0.75,将引起扩容,扩容以后的容量是原容量的2倍;
HashMap
底层是哈希表结构,默认容量:16,加载因子:0.75,扩容增量:容量达到总容量*0.75,将引起扩容,扩容以后的容量是原容量的2倍;
HashTable
底层是哈希表结构,默认容量:11,加载因子:0.75,扩容增量:容量达到总容量*0.75,将引起扩容,扩容以后的容量是原容量的2倍+1;
集合使用场景图
刚接触,整理定有不足之处,望海涵,不足或者错误之处还望指正!!!
这篇关于Java集合知识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22项目:远程温湿度检测系统
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南