- 博客(97)
- 收藏
- 关注
原创 java企业级开发对象规范概念 POJO、PO、DTO、BO、VO
在Java企业级开发中,我们经常会遇到POJO、PO、DTO、BO、VO等各种对象概念,这些看似相似的术语常常让开发者感到困惑。本文将深入解析这些核心概念的区别与联系,并通过代码示例展示它们在实际项目中的正确使用方式。MyBatis示例2、BO(Business Object,业务对象) :BO,可由而成,包含复杂的业务操作(如数据校验、流程控制) : 独立于具体存储方式,可操作数据库、缓存、外部接口等 例如,订单BO可能包含用户PO、商品PO和支付信息PO 示例场
2025-05-16 17:25:20
935
1
原创 UML知识点总结
. . 韩国 - StarUML (SU). MS - Visio. 枫叶云 (. draw.io*这里我是用的是 draw.io***详情可看https://blog.csdn.net/sunyctf/article/details/131432972**。
2024-12-24 15:13:16
900
原创 数据库设计
迷你型 1字节 128~127小整型 2字节 32768~32767中整型 3字节 8388608~8388607标准整型 4字节 2147483648~2147483647大整型 8字节 -9223372036854775808~9223372036854775807Float 7个有效位Double 15个有效位Decimal 28个有效位Float: 需要小数部分并且对精度的要求不高时,选择float。
2024-12-19 14:07:05
1015
原创 java generic03
class person<E> { //E 表示 s 的数据类型 该数据类型是在定义 person 对象的时候制定 即。//4. 泛型的作用是 可以在类声明时 通过一个标识表示类中某个属性的类型 或者是某个方法的返回值。public person(String name) {// E也可以是参数类型。public person(E name) {// E也可以是参数类型。public E info (){ // 方法返回类型 也可以是 E。// 在编译期间 就是确定 E 是什么类型。
2024-03-02 22:30:05
429
原创 java generic泛型01improve
/1. 当我们Arraylist<dog1> 表示存放到 Arraylist 集合中的元素是 dog1类型。//3. 在遍历的时候 可以直接取出 dog1 类型 而不是object 类型。// arrayList.add(new cat1("妞妞",1));package com.wq.generic泛型.improve;public class generic泛型01improve {//2. 如果编译器发现添加的类型 不满足当前条件 就会报错。
2024-03-02 22:29:07
376
原创 java generic泛型01
Exception in thread "main" java.lang.ClassCastException: com.wq.generic泛型.improve.cat cannot be cast to com.wq.generic泛型.improve.dog。at com.wq.generic泛型.improve.generic泛型01.main(generic泛型01.java:16)package com.wq.generic泛型.improve;//在下面就是出现 一个类型异常。
2024-03-02 22:26:51
438
原创 java 集work2
添加多个对象 = [car{name='1', price=1.0}, car{name='1', price=1.0}, car{name='1', price=1.0}, car{name='1', price=1.0}, car{name='1', price=1.0}]删除 = [car{name='baoma', price=100000.0}, car{name='sanling', price=1.0E7}, car{name='sibalu', price=1.000654E8}]
2024-03-02 22:24:04
410
原创 java 集合work1
list.add(new news("新冠比例超千万, 数百万印度教徒赴恒河“盛浴”引起民众担忧"));list.add(new news("男子突然想起两个月前钓的鱼还在往兜里, 捞起一看赶紧放生"));package com.wq.集合work;男子突然想起两个月前钓的鱼还在...新冠比例超千万, 数百万印度教...
2024-03-02 22:22:54
365
原创 collections工具类常用方法2
System.out.println("查询tom出现的次数"+Collections.frequency(list , "tom"));System.out.println("自然集合最大元素"+ Collections.max(list));System.out.println("自然集合最小元素"+Collections.min(list));Collections.replaceAll(list, "tom","汤姆");System.out.println("长度最大的元素 = "+ obj);
2024-03-02 22:21:42
343
原创 collection常用方法1
/4. sort(list.comparator) 根据指定的 comparator 产生的顺序对list 集合元素进行。//5. swap (list, int ,int ):将指定list 集合中的 i 处元素和 j 处元素 进行交换。//2. shufle(list) 对list集合 元素进行随机排序 (可以用于抽奖)//3. sort(list) 根据元素自然顺序 对指定list 集合元素 按升序排序。System.out.println("长度排序后"+list);
2024-03-02 22:20:42
376
原创 treemap底层排序源码
else 遍历中 发现 添加的key 与 当前已有的key 相等 就返回 val并替换val 不添加新的key。1. 构造器 把传入的实现了 comparator 接口的匿名内部类 传给treemap。treeMap.put("kristina", "克瑞斯提诺");treeMap.put("smith", "史密斯");treeMap.put("jack", "杰克");treeMap.put("tom", "汤姆");
2024-03-02 22:19:15
430
原创 treeset底层源码分析
*1. 构造器吧传入的比较器对象 赋给了 treeset 的底层 treemap 属性。//3. 使用treeset 提供的一个构造器 可以传入一个比较器(匿名内部类)//调用 String 的compareto 方法 进行字符串大小比较。//1. 当我们使用无参构造器 创建treeset 时 仍然是无序的。//2. 希望按照 首字母字母表来 输出。// 如果遇到相同长度 就加不进去。
2024-03-02 22:18:19
390
原创 properties介绍01
/3. properites 还可以用于 从 xxxx。//1. properties 类继承自 hashtable 并且实现map接口 也是使用一种键值对的形式 k-v。//4. 说明工作后 xxx.properites 文件通常作为配置文件 这个知识点在 io流演示。//获取k 对应的val值。//不可以为null。// 进行读取与修改。
2024-03-02 22:16:30
413
原创 hashtable使用介绍01
/执行方法 addEntry(int hash, K key, V value, int index) {添加k-v 封装到 Entry。//底层有数组 hashtable$Entry[] 初始化大小为 11 k-y -> Entry -> table。//2. hashtable 的键与值 都不能为空null 否则抛出异常NullpointerException。//扩容按照自己的扩容机制。
2024-03-02 22:15:33
359
原创 java hashmap底层源码01
if (p.hash == hash && 如果想要加入的与原来位置有的hash值相等 并且 原位置的key 与 想要加入的key 对象。if ((e = p.next) == null) {如果整个链表没有与其相同的 就加在链表后面。//4. 当添加 key-val 时 通过key 的hash值 得到在数组table 的索引。if (e.hash == hash && 如果链表中有相同的 就判断 满足 就 替换val。// 的key 与准备加入的 key 是否相等 如果相等 则替换val 如果不相等。
2024-03-02 22:13:19
434
原创 java map接口遍历方法
System.out.println("----------------------使用entryset 第三种方法---------------------");System.out.println("-----------------------第二种方法-----------------------");System.out.println("-------------------------第一种方法-----------------");//第二组 : 把所有的values 取出。
2024-02-27 18:11:43
393
原创 java map常用方法
System.out.println(map.containsKey("邓超"));System.out.println(map.get("鹿晗"));map.put("邓超",new Book("",100));map.put("邓超","king");//containskey 查找键是否存在。map.put("王宝强","马蓉");map.put("鹿晗","关晓彤");map.put("邓超","孙俪");map.put("宋喆","马蓉");//2. get 根据键 获取值。
2024-02-27 18:10:35
389
原创 java map02
/ Entry 对象就有 k-v Entryset<Entry<k,v>> 即源码: transient Set<Map.Entry<K,V>> entrySet;// 这是因为 static class Node <k,v> implements map.Entry<k,y>//3. entryset 中 定义的类型是 map.entry 但是实际上存放的还是 hashmap$node。//2. k-v 为方便遍历 还会创建 Entryset 集合 该集合存放的元素的类型 Entry 而一个。
2024-02-27 18:09:36
354
原创 java map_
{no2=123, null=789, no1=king, no4=null, 2=king, no3=sky, no5=null, java.lang.Object@1b6d3586=金毛狮王}// map 中的key 可以为 null value也可以为null 注意key 只能有一个为null value 为 null 可以有多个。// map 中的 key value 可以是任何引用类型的数据 会封装到 hashmap$Node对象中。// map中的 value 是可以重复的。
2024-02-27 18:08:46
354
原创 java linkedHashset text
car{name='god', price=2000000.0}, car{name='king', price=2000000.0}, car{name='三菱evo', price=2000000.0}]set.add(new car("三菱evo", 2000000));
2024-02-27 18:07:17
349
原创 java linkedHashset介绍01
/ 2. linkedHashset 底层是一个 LinkedHashMap 底层维护了一个数组+双向链表(hashmap 的子类)// 4. 数组是 hashmap$Node[] 存放的元素 / 数据是 linkedhashmap$Entry类型。// 2. linkedHashset 底层是一个 LinkedHashMap 底层维护了一个双向链表。//1. linkedHashset 加入顺序 与 取出顺序元素 数据顺序一致。// 1. linkedHashset 是 Hashset 的一个子类。
2024-02-27 18:05:30
340
原创 java HashsetTest01
package com.wq.collection.Set.HashSet全面说明;如果该位置有存放元素 则需要进行 equals 判断 如果相等则不添加。对哈希值进行运算 得出一个索引值 即为存放在哈希表中的位置号。先获取元素的hash值 (hashcode) 方法。如果该位置没有其他元素 则存放。如果相等则以链表形式添加。
2024-02-20 22:44:43
338
原创 java HashSet底层机制源码分析03
节点 并且table 的大小>=MIN_TREEIFY_CAPACITY(默认为64) 就会进行树化(红黑树)临界值 (threshold) 是16*加载因子 (loadfactor) 是0.75 = 12。package com.wq.collection.Set.HashSet全面说明;hashset 底层是hashmap 第一次添加时 table 数组扩容到 16。如果table 数组使用到了临界值12 就会扩容到16*2 = 32。//debug 看扩容机制。
2024-02-20 22:42:25
394
原创 java HashSet底层机制源码分析02
if (p.hash == hash && //如果当前索引位置 对应的链表的第一个元素 和准备添加的key 的hash值一样。//(2) p 指向的Node 节点的 可以key 的equals() 和准备加入的 key 比较后相同。// (1) 一次和该链表的每一个 元素进行比较 后 如果都不相同 则加入到 该索引中链表的最后。//定义辅助变量 //table就是hashmap的一个数组 类型是 Node[]//(1) 准备加入的key 和 p 指向的Node 节点的 key 是同一个对象。
2024-02-19 23:00:35
922
原创 java HashSet底层机制源码分析01
table = [Lcom.wq.collection.Set.HashSet全面说明.Node;package com.wq.collection.Set.HashSet全面说明;//模拟一个 HashSet 的底层 (就是 hashmap 的底层结构)class Node {//节点储存数据 可以指向下一个节点 从而形成链表。//将 king 节点挂载到 god。//创建一个数组 数组的类型是 Node []// 指向下一个节点。//可以直接把 Node 称作为表。//数组加链表 最后 红黑树。
2024-02-19 22:59:19
396
原创 java HashSet03案例
package com.wq.collection.Set.HashSet全面说明;public class HashSet03案例 {hashSet.add("lucy");//在加深一下 经典面试题。
2024-02-19 22:58:06
320
原创 java HashSet02案例
package com.wq.collection.Set.HashSet全面说明;public class HashSet02案例 {
2024-02-19 22:57:02
404
原创 java HashSet全面说明 HashSet01
package com.wq.collection.Set.HashSet全面说明;4. hashset 不保证元素是有序的 取决于hash后 在确定索引的结果。5. 不能有重复元素 / 对象 在前面set 接口 使用已经讲过。3. 可以存放null 值 但只能存放一个null。2. hashset 实际上是 hashMap。1. hashset 实现set接口。
2024-02-19 22:56:31
342
原创 java SetMethod01接口方法
/ 2. set 接口对象存放数据 是无序的 (添加顺序 与 取出顺序 不一致)// 1. Set接口实现类的对象方法 (set 接口对象)不能存放重复的元素。public class SetMethod01接口方法 {set.remove("king");// 3. 去除顺序是固定的 不会取一次变一次。//使用hashset 实现Set接口方法。// 可以添加一个null;//不能用普通for循环。
2024-02-18 22:07:31
367
原创 java List集合选择01
4. 在一个项目中 业务灵活选择 也坑能 一个模块使用ArrayList 另一个使用 LinkedList。3. 80%-90% 都是查询 大多情况下选择ArrayList。//ArrayList 1 LinkedList 比较。public class List集合选择01 {//增删效率:较低 数组扩容 1 较高 链表追加。2. 增删操作多 选择LinkedList。1. 改查操作多 选择ArrayList。//底层结构:可变数组 1 双向链表;//改查效率:较高 1 较低。5. 两者都是线程不安全。
2024-02-18 22:06:39
314
原创 java LinkedListCRUD方法01
2. 这时 linkedlist 的属性 first= null last = null。public class LinkedListCRUD方法01 {//遍历 linkedlist 实现了 list 接口 可以遍历。
2024-02-18 22:06:08
380
原创 java LinkedList底层结构01
3. 每个节点 (Node对象) 里面有维护了 prev next item 三个属性 其中通过。//让 first 引用指向king 就是双向链表的头结点。//让last 引用指向god 就是双向链表的尾结点。prev 指向前一个 通过next 指向后一个 节点 最终实现双向链表。//双向链表添加对象 :在 wq与god 之间插入一个 bob对象。// 指向后一个节点。// 指向前一个节点。//头到尾 尾到头 将 first 改为last。// 链接三个节点 形成双向链表。//模拟简单的双向链表。
2024-02-18 22:05:08
445
原创 java Vector源码剖析
public class Vector源码剖析 {2.1 方法为 添加数据到 vector 集合。/* 1. new Vector 底层。2.3 需要数组大小 不够 就扩容两倍。2.2 确定是否需要扩容。
2024-02-18 22:03:50
406
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人