读源码之旅 java.util包

本文探讨了Java集合框架中HashMap, TreeMap, ArrayList和LinkedList的核心作用,并回顾了它们的基础原理,如hash表和红黑树等。同时提出了HashMap的hash算法及Collections辅助类中的阈值设定等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很久没有写博客,有点汗颜,很多东西自己开始梳理一些,用博客的方式记录下来,既然自己是一名java开发人员,对jdk的源码也应该有一些研究一下。从网上下载下面的一个图片
[img]http://dl.iteye.com/upload/attachment/198391/972a7c44-1972-3dab-bf66-a5a514f932dd.bmp[/img]

对于其他的util类,暂时还没有去研究,只是看了图上所有类的所有方法,看完的感觉就是,核心的类就是四个:HashMap,TreeMap,ArrayList和LinkedList,至于set接口里面的东西基本上都是由HashMap,TreeMap派生而成的,可以重温习一下大学时候学习的hash的构成以及红黑树增删改查,以及怎样构造两种不同的链表结构。

看完有两个疑问:
HashMap里面的hash规则是根据什么算法写成的呢?这一点比较疑惑
    static int hash(Object x) {
int h = x.hashCode();

h += ~(h << 9);
h ^= (h >>> 14);
h += (h << 4);
h ^= (h >>> 10);
return h;
}


Collections辅助类里面的
  private static final int BINARYSEARCH_THRESHOLD   = 5000;
private static final int REVERSE_THRESHOLD = 18;
private static final int SHUFFLE_THRESHOLD = 5;
private static final int FILL_THRESHOLD = 25;
private static final int ROTATE_THRESHOLD = 100;
private static final int COPY_THRESHOLD = 10;
private static final int REPLACEALL_THRESHOLD = 11;
private static final int INDEXOFSUBLIST_THRESHOLD = 35;


这一些值是怎样确定的,为什么可以用这一些值就可以确定是否采用循环或迭代方式去取值,难道是通过一次又一次的性能测试后确定的?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值