每日学习笔记(16)
在看jdk里的collection framework这部分,小结一下:
1, Arrays.copyOf, System.arraycopy这两个方法用得非常多。
2, 比较两个 Object是否相等
if (o1==null ? o2 == null : o1.equals(o2))
3, equals方法一般写法
Public Boolean equals(Object o) {
If (o == this) return true;
If ( ! (o instanceof List) return false;
//比较具体数据大小
}
4,Iterator 一定要会用
5,延迟初始化一定要用
6,写clone 方法一般写法
Public Object clone()
{
//step 1: super.clone()得到一个基本对象
//step 2: 对基本对象的各个值域进行设置
}
7,布尔变量对多个数据进行测试
boolean modified = false; modified |= remove(i.next());
8,transient和 volatile的用法
9,在ArrayDeque里面,为了找到最合适的大小(2的幂数),有下面的代码
initialCapacity = numElements;
initialCapacity |= (initialCapacity >>> 1);
initialCapacity |= (initialCapacity >>> 2);
initialCapacity |= (initialCapacity >>> 4);
initialCapacity |= (initialCapacity >>> 8);
initialCapacity |= (initialCapacity >>> 16);
initialCapacity++;
if (initialCapacity < 0) // Too many elements, must back off
initialCapacity >>>= 1;// Good luck allocating 2 ^ 30 elements
}
10,删除掉的对象一定要设置为null,让GC去做剩余的清理工作
11,对double和float,一定要调用Double.doubleToLongBits和Float.floatToIntBits来做处理
12,Arrays.java里的排序算法,当数组长度小于7,则用插入排序,否则用快速排序和归并排序
13, Collections.java里的排序,都是先把集合转为数组,然后对数组进行排序,最后将排序后的数组元素放回集合中
14, 一般设计锁的时候可以考虑用单独的锁对象,或者是当前类,或者是this对象
15,null转变为Null值对象
16,用反射来生成新数组
if (a.length < n) {
a = (T[])java.lang.reflect.Array
.newInstance(a.getClass().getComponentType(), n);
17,为了防止更改参数中的对象,一般参数都声明为final,然后在函数内部还可以用clone方法做一个拷贝,对拷贝进行操作。
18,HashMap的内部实现是一个桶数组,每个桶是一个Entry链表。调用get函数来获取一个元素时,首先对key的hash值进行hash运算,然后利用得到的hash值对桶数组进行索引,得到其所在的桶,然后从这个桶的首元素开始遍历比较
19,HashMap和Hashtable的区别就是,它不是线程安全的,而且允许null键和null值
20,HashSet的底层实现是一个HashMap<E,Object>,当放一个对象时,值部分是一个Null对象 Object PRESENT = new Object();
21,和序列化有关的readObject方法和writeObject方法还需要进一步研究
22,Hashtable.java里的再哈希函数rehash,是先new一个新大小的桶数组,然后对原来的老桶数组里的元素,利用新容量做hash得到其在新桶里的索引,然后将其插入为其所在桶链表的首元素
作者:洞庭散人
出处:http://phinecos.cnblogs.com/
posted on 2011-04-14 18:08 Phinecos(洞庭散人) 阅读(1204) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
2010-04-14 ubuntu9.10安装文泉驿微米黑字体
2010-04-14 Ubuntu下安装Fcitx中文输入法
2008-04-14 对Skin++在VS2005中的一个问题的解决方案