首页 > 编程语言 >你真的读懂了Java源码?Collections源码初探

你真的读懂了Java源码?Collections源码初探

时间:2023-06-13 12:22:45浏览次数:50  
标签:Java int private 源码 Collections THRESHOLD static final

最近重温Java知识,遇到不懂的问题搜索互联网/博客很难直接找到答案,还好如今有了chatGPT,比大多数CV复读机/纯文档翻译的内容更有用。很多文章总结冠以“深入理解xxx”,“万字长文详解xxx”的文章,也不过是演示一遍调用代码,让你知道了怎么用,在什么情况下用。但至于为什么这么用,以及Java语言为什么这么设计,可能大多数人也没领悟或者探索其原理和初衷。

包 Package

Collections类位于 java.util 包中。源代码第一行 package java.util; 表示Collections所在的包(Package)。java.util包还包含其他的类、接口,在同一个包下Java编译器默认会自动加载这些类。包的设计是为了方便代码的组织和管理,使用时不需要import语句导入每一个文件,也可以避免命名冲突(不同的包名下可以有相同的类名)。

静态成员

Collections是一个算法合集,可以看到构造器是由 private 修饰的,无法实例化。因此成员和方法都是 static 静态的。
接下来的代码是静态成员,注释已经说明了这些常量是为了更好算法性能的调整参数。下面所有阈值都是在元素个数较小或者支持随机访问RandomAccess的列表中依据经验选取的参数。变量名第一个单词表示对应的算法。

    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;

静态方法

排序

排序算法方法体比较简单,根据形参是否带比较器,有两种实现。不带比较器的 sort 方法由 public static <T extends Comparable<? super T>> 修饰,是一个泛型定义的语法。先看内层,? super T 是Comparable接口的泛型参数,其中 ? super 是下界通配符,保证Comparable接口能够使用T或T的超类作为类型参数。因此 sort 方法的泛型类型 T 必须是实现了Comparable接口,并且Comparable接口的类型参数是T或者T的父类。

标签:Java,int,private,源码,Collections,THRESHOLD,static,final
From: https://www.cnblogs.com/izcat/p/17477190.html

相关文章

  • java WebUploader 分片上传
    ​ 对于大文件的处理,无论是用户端还是服务端,如果一次性进行读取发送、接收都是不可取,很容易导致内存问题。所以对于大文件上传,采用切块分段上传,从上传的效率来看,利用多线程并发上传能够达到最大效率。 本文是基于springboot+vue实现的文件上传,本文主要介绍服务端实现文件......
  • Java 利用POI对象 SXSSFWorkbook 导出Excel
    最开始调用的方法是(标记的地方): workbook=newHSSFWorkbook();和workbook=newXSSFWorkbook();这两个方法就是导出Excel的最关键的方法,接下来我来说说这两个方法作用:1.HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;2.XSSFWorkbook:是操作Excel2007的版本......
  • Java判断一个List中是否有重复元素
    1.将List转为Set,通过2个集合的size大小是否相等来判断有无重复元素publicstaticvoidmain(String[]args){ListstringList=newArrayList<>(Arrays.asList("a","a","b","c"));SetstringSet=newHashSet<>(stringList);......
  • Javascript中的内存(垃圾)回收机制
    JavaScript具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行常见的垃圾回收方式:标记清除、引用计数方式。一、标记清除方法1、工作原理:【标记“离开环境”的就回收内存】当变量进入环境时,将这个变量标记为“进入环境”。当变量离开环境时,则将其标记为“......
  • 一对一直播源码平台搭建的关键条件,成败在此。
     网络时代的前进,人们对直播也有了新的要求,对于观众们来说,大多数观众更喜欢只让自己和主播进行交流,只有不仅仅能增加私密性,而且还能和自己喜欢的主播更加亲近真实,像是面对面一样;而对于主播而言,大部分主播都想让自己轻松许多,并且收益更高。而随着直播源码平台的发展,一对一直播源码......
  • springcloud 启动失败 YAMLException java.nio.charset.MalformedInputException Inp
     上面这个是错误信息,但是该微服务在本地启动的时候是可以的,但是本地打成jar包本地执行的时候就失败。需要再Java-jar的中间加一下字符编码java-Dfile.encoding=utf-8-jar  myself.jar   myself.jar是自己的jar包问题解决......
  • java 获取ftp文件列表以及模糊查询,并对结果进行分页
    /***获取ftp文件列表*".*\\.txt":匹配所有以".txt"结尾的文件名。其中,星号(*)表示任意字符序列,反斜杠(\)用于转义点号(.)字符。*".*"+"任意字符"+".*\\.txt":匹配所有包含"表示匹配任意多个任意字符"和以".txt"结尾的文件名。其中,星号(*)表示任意字......
  • this 之谜揭底:从浅入深理解 JavaScript 中的 this 关键字(二)
    前言系列首发于公众号『前端进阶圈』,若不想错过更多精彩内容,请“星标”一下,敬请关注公众号最新消息。this之谜揭底:从浅入深理解JavaScript中的this关键字(二)调用位置在理解this的绑定过程之前,首先要理解调用位置:调用位置就是函数在代码中被调用的位置(而不是声明的......
  • Java中锁的使用
    目录Java提供了多种锁机制来实现多线程同步和互斥。synchronized关键字ReentrantLockReentrantReadWriteLockSemaphoreCountDownLatch以上是Java中常用的锁机制,不同的锁机制适用于不同的场景。在使用锁时,需要注意避免死锁、饥饿等问题,保证程序的正确性和效率。Java提供了多种锁机......
  • JAVA非递归生成无限级菜单树的较简代码实现。(非泛用型工具包,仅总结逻辑)
    这是一个根据列表生成一个树状结构的较简单实现。搜了搜看起来好像没多少人总结过这种实现。写上来整理一下自己的思路,请大家用用看看,应该用起来问题不大?反正我没遇到BUG。实现的时间复杂度为O(N),空间复杂度应该还是O(N)吧。不过GPT说O(1)可能是因为java的对象实现hash链表是引用而不是......