
Java
麦格马戈登
这个作者很懒,什么都没留下…
展开
-
【Java】对象根据属性去重
准备需要去重处理的对象的集合:List<User> userList = new ArrayList<>();userList.add(new User(1L, "a"));userList.add(new User(2L, "b"));userList.add(new User(2L, "c"));1. 方法一(最简便)使用 TreeSet 去重,初始化 TreeSet 时指定排序规则,不用改动实体类。TreeSet<User> set1 = new T原创 2022-05-07 11:35:49 · 796 阅读 · 0 评论 -
【Java】使用ArrayList的subList的注意事项
subList结果不可强转成ArrayList,会抛出ClassCastException:java.util.ArrayList$SubList cannot be cast to java.util.ArrayList。(原因:subList返回的是ArrayList的内部类SubList,并不是ArrayList而是ArrayList的一个视图,对于SubList子列表的所有操作最终会反映到原列表上。)修改原集合元素的值,会影响子集合。修改原集合的结构,会导致子列表的遍历、增加、删除产生Conc.原创 2022-04-07 22:14:37 · 1145 阅读 · 0 评论 -
【Java】使用Arrays.asList的注意事项
使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常。因为Arrays.asList返回的是Arrays的内部类ArrayList(并不是java.util包下的ArrayList),它继承了AbstractList但没有重写add、remove、clear方法。使用Arrays.ArrayList调用toArray方法生成的数组是带有泛型的数组,而.原创 2022-04-07 22:13:11 · 801 阅读 · 0 评论 -
【Java】如何实现深拷贝?
方法一:Object类提供了clone方法,但是它是浅拷贝的。实现Cloneable接口,重写clone方法,引用类型的成员属性再次调用clone方法创建。 方法二:实现Cloneable接口,重写clone方法,通过序列化和反序列化方式创建对象。......原创 2022-04-07 22:12:05 · 384 阅读 · 0 评论 -
【Java】为什么说Java只有值传递而没有引用调用
Java程序设计语⾔总是采⽤按值调⽤。也就是说,⽅法得到的是所有参数值的⼀个拷⻉,也就是说,⽅法不能修改传递给它的任何参数变量的内容。对于基本数据类型,方法得到的是值的拷贝。对于引用数据类型,方法得到的是引用的拷贝。总结:① ⼀个⽅法不能修改⼀个基本数据类型的参数(即数值型或布尔型)。② ⼀个⽅法可以改变⼀个对象参数的状态。③ ⼀个⽅法不能让对象参数引⽤⼀个新的对象。...原创 2022-04-07 22:08:23 · 311 阅读 · 0 评论 -
【Java】int类型为什么负数比正数多了一个数?
int占4字节,也就是32位二进制,最高位是符号位,剩下31位用来表示数字绝对值大小,但负零1000…和正零0000…都表示0,这是浪费的,于是约定正零表示0,负零表示-2147483648,也就是说0占用了二进制计数法表示正数的一个位置,导致比负数少了一个。...原创 2022-04-07 22:01:58 · 1170 阅读 · 1 评论 -
【Java】为什么equals()和hashcode()要同时重写?
如果想把A类的实例放入jdk提供的哈希表容器中,比如在HashMap用作key,就必须保证以下原命题(命题1)为真:原命题(命题1):如果两个A类实例的hashcode不相等,那么这两个实例通过equals比较返回false。这个命题的逆反命题(命题2)是:逆反命题(命题2):如果两个实例通过equals比较返回true,那么这两个实例的hashcode相等。我们知道,原命题和逆反命题同真同假,所以,要维护原命题为真,只需保证其逆反命题为真即可。也就是说,equals返回true了,就必须原创 2022-04-07 18:49:44 · 2078 阅读 · 0 评论 -
【Java】isAssignableFrom()和instanceof
.isAssignableFrom()方法与instanceof关键字的区别总结为以下两个点:isAssignableFrom()方法是从类继承的角度去判断,instanceof关键字是从实例继承的角度去判断。isAssignableFrom()方法是判断是否为某个类的父类,instanceof关键字是判断是否某个类的子类。使用方法:父类.class.isAssignableFrom(子类.class)子类实例 instanceof 父类类型原文链接:https://blog.csdn原创 2022-03-31 09:04:37 · 249 阅读 · 0 评论 -
【Java】记一次parallelStream线程安全问题
1.错误: tokenInfo.getRoleIdSet().parallelStream().map(roleId -> { SysRole role = new SysRole(); role.setId(roleId); return role; }).forEach(role -> securityUser.getRoleList().add(role));2.改正: tokenInfo.getRoleIdSet().parallelStream().m原创 2022-03-30 22:52:14 · 2523 阅读 · 2 评论 -
【Java】ArrayList扩容过程 JDK1.8
无参构造ArrayList后,list长度为0,内部数组长度为0。如果是第一次add或addAll,添加数量不足10个时,都扩容为10,addAll数量n大于10个时,所需最小容量minCapacity被指定为n;如果不是第一次add,所需最小容量minCapacity被指定为当前list的size加上add或addAll进去的数量n。接下来,检查所需最小容量minCapacity是否超过了当前数组长度,如果超过了,则进行扩容,并且此时modCount加1。接下来,比较当前容量乘以1.5和所需最小容.原创 2022-03-30 21:51:07 · 473 阅读 · 0 评论 -
【Java】Java中的位移运算
以下分析仅针对Java语言,可以直接看最下面的结论。一、左移(<<):高位舍弃,低位补0,所有位一起左移,包括符号位 代码(初始为正数1,连续左移,直到为0) int n = 1; int step = 0; System.out.println(step + ":" + Integer.toBinaryString(n) + ":" + n); while (n != 0) { n = n << 1; step++; System.out.p原创 2022-03-30 19:08:59 · 8094 阅读 · 0 评论