JAVA集合以及AOP梳理分享

分享一下以前整理的集合以及aop的理解 等

1、常见集合类的区别和适用场景

  • 集合区别
  • https://www.cnblogs.com/ArvinSnow/p/11045095.html
  • 非线程安全原因
  • https://blog.csdn.net/wufaliang003/article/details/80219296?utm_source=blogxgwz3
  • https://blog.csdn.net/qq_33210715/article/details/104748230
  • ConcurrentHashMap 兼顾了线程安全和性能
  • https://www.jianshu.com/p/d0b37b927c48
  • LinkHashMap
  • https://blog.csdn.net/zip_tts/article/details/85537380
  • 为何改为尾部插入
  • https://www.jianshu.com/p/72181e25afb9
Map

HashMap : 数组+链表+红黑树 非线程安全 ,无序 ,允许Null

TreeMap : 红黑树 非线程安全 ,有序(大小)

HashTable : 结构同hashmap,线程安全,同步锁,效率低下,无序 , 不允许Null

LinkedHashMap : 数组+链表+红黑树 + 双向链表 实现有序(存储顺序) 非线程安全

ConcurrentHashMap : 线程安全 ,效率高 分段锁 ,无序


Set

HashSet : 创建一个HashMap,存到key上 ,value为object-不存nll是因为putval 和rmove等方法成功会返回对象 无序,速度快

TreeSet :创建一个TreeMap,有序(比较大小),速度慢
根据某个属性排序,实现Comparator接口

  • https://blog.csdn.net/time_shuo/article/details/52195645
//创建时
Set<TestScenario> scenarios = new TreeSet<>(new test().new Mycompare());
//流的方式分组 —— 》 Map<String, List<TestScenario>>
scenarios.stream().collect(Collectors.groupingBy(TestScenario::getTestTask));

LinkedHashSet:创建一个LinkedHashMap,有序(按插入顺序),速度慢

Set mySet=ConcurrentHashMap.newKeySet(); — 创建一个线程安全的SET

LIST

ArrayList : 线程不安全,数组,查询快,插入慢,动态对象数组实现的,默认构造方法创建一个空数组

Vector : 线程安全,原理也是采用一个动态对象数组实现的,只不过它的默认构造方法创建一个大小为10的对象数组,,适合在多线程访问时使用,效率较低

LinkList : 双向链表 ,插入快,查询慢

  • 数组的连续内存, 会有一部分或者全部数据一起进入到CPU缓存, 而链表还需要在去内存中根据上下游标查找, CPU缓存比内存块太多
  • https://www.cnblogs.com/guanbin-529/p/11809596.html
数组排序
planItems.sort((x, y) -> Integer.compare(x.getOrd(), y.getOrd()));
支持流

Aop

动态代理

  • jdk代理,java 必须实现接口
  • CGLIB 代理 实现类
  • https://www.cnblogs.com/dengchengchao/p/11823687.html
<aop:aspectj-autoproxy  proxy-target-class="true"/>  为cglib

个人调试理解:jdk代理不支持接口,代理controller等无实现接口时会走cglib代理。

代理的类有实现接口时无法直接注入实体类进行代理。cglib可以。
  • 方法中嵌套调用aop切不到
  • https://blog.csdn.net/weixin_33816300/article/details/91716114
  • 个人理解:实测单独再第二个方法设置aop也无法切到。应该时this调用没有从容器中取,调用的方法未经过AOP增强,所以无法切到
  • https://www.iteye.com/blog/fyting-109236
  • 按我的理解其实就是没有去扫描方法中的方法的注解

解除外键约束

	
SET FOREIGN_KEY_CHECKS=0;
	delete from csrt_assessment;
	UPDATE csrt_test_task set ASSESSMENT_ID = null;
SET FOREIGN_KEY_CHECKS=1;

链接: 笔记.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值