各种集合类型底层实现原理


Set和Map的关系
Set代表无序,不能重复的集合;Map代表Key-Value组成的集合,是一种关联数组。Map的Key要求是不能重复,没有顺序。把Map的所有Key组合起来就是Set。Set keySet();


HashMap和HashSet原理
HashMap底层是用数组链表存储的,元素是Entry。向HashMap添加时,由key的hashcode决定Entry存储位置,当两个Entry对象的key的hashcode相同时,由key的equals()方法返回值决定采用覆盖行为(返回true),还是在链表头添加新的Entry(返回false)。Collection values(),返回集合对象,但不能添加元素,主要是用来遍历。自定义类如果放入HashMap或HashSet中,需要重写equals和hashcode方法。

 

HashSet s = new HashSet

s.add(new Name("1"));

System.out.println(s.contains(new Name("1")));
如果不对Name类重写hashcode,equals,输出结果是false。因为默认的不能保证结果一样。


TreeMap和TreeSet原理
TreeMap底层是用红黑树来存储,每个Entry对应树的一个节点,TreeMap元素默认从小到大排序。V put(Key k, Value v)实质是二叉排序树的插入算法

ArrayList底层是数组
List是线性表的数据结构,ArrayList是顺序存储的线性表

LinkedList底层是链表
LinkedList是链式存储的线性表,实质是双向链表,实现了List和Deque接口。Deque代表双端队列,既可以当做队列也可以当作栈。

Vector和ArrayList区别
Vector提供synchronized修饰方法,是线程安全版本的ArrayList
. Vector  本质是一个数组,其实所有集合都是数组,从JAVA 来说搞成了对象,符合我   们的OO,可以参考学习。
Iterator迭代器
用于迭代Collection集合,包括Set和List。集合提供iterator()方法
迭代器模式:系统为遍历集合提供标准的“迭代器接口”,用于访问集合里的数据,如何实现交给集合自己完成。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Mybatis的底层实现原理是基于JDK动态代理技术。具体来说,Mybatis利用动态代理技术生成Mapper接口的实现类。在使用Mybatis时,我们只需要编写Mapper接口,并定义对应的SQL语句,而不需要编写SQL的具体实现代码。 当我们使用Mapper接口时,Mybatis会在运行时动态生成Mapper接口的实现类,并将SQL语句与方法进行关联。当调用Mapper接口的方法时,Mybatis会根据方法名和参数类来生成对应的SQL语句,并执行该SQL语句。执行SQL语句的过程中,Mybatis会将结果集映射到对应的实体对象或集合中,以方便我们使用。 底层最后还是使用的iBatis中的SqlSession对象来执行SQL语句。SqlSession对象是Mybatis的核心对象之一,它负责管理数据库连接、执行SQL语句以及处理事务等操作。 总结来说,Mybatis底层实现原理是通过JDK动态代理技术生成Mapper接口的实现类,并利用iBatis中的SqlSession对象来执行SQL语句。这样可以方便我们编写和管理SQL语句,减少了手动编写JDBC代码的工作量。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Mybatis底层原理实现](https://blog.csdn.net/weixin_60267819/article/details/120431486)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值