自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

苦瓜爱coding

苦瓜爱coding的CSDN技术博客

  • 博客(10)
  • 收藏
  • 关注

原创 Java HashSet/LinkedHashSet/TreeSet

是简单粗暴的HashMap套壳实现继承了HashSet 与其不同的是,内部存储数据的结构用的是 LinkedHashMap调用了HashSet中初始化LinkedHashMap的构造函数内部是 NavigableMap存储数据

2022-06-14 22:33:59 147 1

原创 Java TreeMap

红黑树(含有红黑节点的自平衡二叉查找树)平均查找/插入/删除/复杂度O(logn)二叉树是每个节点最多只有两个分支的树结构若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;任意节点的左、右子树也分别为二叉查找树;可能会退化成只有右子树的状态,退化成链表左右子树的高度相差不超过 1 的树为平衡二叉树红黑树是一种含有红黑结点并能自平衡的二叉查找树...

2022-06-10 22:41:43 153

原创 Java HashMap

数据结构:哈希桶+链表初始容量(16)负载因子(0.75 四分之三)哈希算法(根据hashCode值计算出放到哪个哈希桶里面,防止碰撞)扩容:容量达到负载就会触发扩容,变为原来的两倍,重新哈希计算将原有的元素重新分配数据结构:哈希桶+链表+红⿊树大幅度减轻线程安全问题:扩容时使用与插入顺序一致的方法方便将哈希值映射到桶的编号 hash&(size-1) 容量减一后二进制数后面全是1,方便与哈希值&(按位与)后快速得到桶的编号方便扩容原先的元素要么保持不变,要么被移动到旧index+旧桶大小

2022-06-09 23:08:49 136

原创 Java LinkedList

不仅是Java的一个类,还是一个数据结构是经典的双向链表实现:prev/next指针也是Java中最常用的Deque(双端队列)实现双向链表查找:O(n) (需要一个一个找,有优化,判断下标在前半部分就从前面开始找,在后半部分就在后面开始找)查找+插入/删除:O(n) (要删除非头尾某个位置的元素要先找到它才能删除)头尾插入/删除:O(1) (直接新建或者删除一个节点即可)核心数据结构的差别:LinkedList是双向链表,ArrayList是数组LinkedList: 用在查询比较少而插入删除比

2022-06-08 21:39:21 177

原创 Java 数组与ArrayList

JVM原生提供的定长数据结构,类型安全的JVM提供了虚拟机级别的支持,有对应的字节码.相当于虚拟机层面定义了一个数组类,限制了类型,有插入和获取指定位置元素的方法.(可以这样子理解但是不存在这个类)有专门指令来操作数组.JVM中"["表示数组数组添加/删除/扩容/并发访问add 添加元素,扩容操作(*1.5)remove 删除元素,删除中间一个元素,要把后面往前补,如果删除最后一个,就只减一下下标.然后将最后一个空间设置成null(用于去除强引用,让无用的最后一个元素被GC)checkFor

2022-06-07 22:47:49 441

原创 Java Iterator 迭代器

它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。调用 it.hasNext() 用于检测集合中是否还有元素。调用 it.remove() 将迭代器返回的元素删除。迭代器模式,将便利的逻辑抽取出来for(User user:userList){} 内部解语法糖就用到了List的迭代器.数组的for语法糖解语法糖后是用的fori循环.当检测到问题时,立即丢出异常.当我们在遍历集合元素的时候

2022-06-06 21:45:19 58

原创 Java 集合的一些约定

对于非null的x来说,x.equals(x)必须返回true;对于非null的x和y来说,如果x.equals(y)为true,则y.equals(x)也必须为true;对于非null的x、y和z来说,如果x.equals(y)为true,y.equals(z)也为true,那么x.equals(z)也必须为true;对于非null的x和y来说,只要x和y状态不变,则x.equals(y)总是一致地返回true或者false;对null的比较:即x.equals(null)永远返回false。终生不变

2022-06-03 21:39:11 182

原创 Java 集合体系

一个对象在内部存有若干个其他Java对象,并且对外提供访问接口,这个对象就是集合数组就是一种集合,但是数组初始化后大小不可变,并且只能按索引顺序存取数据的限制.List 有序列表集合Set 保证没有重复的元素集合Map 通过键值对查找的映射表集合Hashtable:一种线程安全的Map实现;Vector:一种线程安全的List实现;Stack:基于Vector实现的LIFO的栈。Enumeration:已被Iterator取代。...

2022-06-02 22:52:28 82

原创 Java中的基本数据类型占多少内存空间?

为什么 boolean 类型在单独使用占4个字节,而存储到boolean数组中,每个元素只占1个字节.在《虚拟机规范》中,对boolean类型的存储有专门的解释,文中说到:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,(因此)每个boolean元素占8位”。因为

2022-06-01 22:39:24 2129

原创 MyBatis-Plus解决逻辑删除与唯一索引的兼容问题

处理使用 MyBatis-Plus 框架时的,既要使用逻辑删除功能,又要兼容数据库建立唯一索引的问题。有些啰嗦,想找解决方案直接拉到最后。想了解细节可详细阅读。由于数据安全等原因,通常公司都会收回线上环境的 DELETE 权限不允许物理删除数据,所以通常使用逻辑删除,也就是增加一个逻辑删除的字段,用于标识数据已经删除了。日常业务中,经常遇到不能重复存在是业务数据(比如:电子发票数据,公司信息数据)。我们为了保证数据的唯一性,就需要给其建立唯一索引。虽然唯一索引好用,但是结合逻辑删除使用就遇到问题了。假设

2022-05-31 23:13:18 1533 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除