03 2018 档案
摘要:先看一段代码 作为set存储内容的list在向list中增加元素好像后被set"清除"了 实际上list还在set中,只是通过contains找不到了 分析 为了理解问题我们需要通读hashset的源代码: 我们知道hashmap不允许key重复出现,set正是利用了这一点来复用hashmap; 观
阅读全文
摘要:String会出现在哪些地方 + 方法内的局部string + 类内的字段String + static string + 容器中存储的string + String数组 那么String的位置会影响其存储方式吗? 显然是不会的,类永远只会储存在堆上。 但是实际上类的字段并不是一直在堆上的。 Str
阅读全文
摘要:先贴官方文档的核心观点 StringBuffer public final class StringBuffer extends Object + 字符串缓冲区就像一个String ,但可以修改。 + 字符串缓冲区可以安全地被多个线程使用。 这些方法在必要时进行同步。 + 每个字符串缓冲区有一个容量
阅读全文
摘要:在进行如下代码的过程中发现了这样的一个异常:ConcurrentModificationException,即并发修改异常。 提示我在it.next()处抛出异常 以下来自jdk 9 javadoc 当不允许这样的修改时,可以通过检测到对象的并发修改的方法来抛出此异常。 例如,一个线程通常不允许修改
阅读全文
摘要:Unicode转义序列的解析是发生在代码编译之前,编译器机械的将\u样式的代码文本转义,即使是注释以及非正常代码,对此步骤来说也没有区别 导致下面的情况: 由于机械转义,"\u0022+\u0022"实际上是""+""即两个空字符串相加,所以打印为空 注释中的\u000a被转移成\n换行符,所以其后
阅读全文
摘要:继承基本知识:超类基类父类->子类派生类子类继承父类的除private外的字段、方法以及构造器超类的字段建议设定为private,并通过专用的方法来提供接口访问这些字段super和this的区别:super并不是引用,只是一个指示编译器调用超类方法的特殊关键词子类构造器:可以通过super来调用超类
阅读全文
摘要:(泛型使用基本类型方法是否泛型和其所在类是否泛型无关:方法可使用两种泛型:一是如果类也是泛型类,类的泛型可用。而是在返回值前加<T>来定义专属该方法的泛型使用泛型类必须声明泛型,而使用泛型方法不用:编译器会采用类型参数推断技术猜出来。方便的生成容器:由于技术有限,容器的生成必须经显式的声明泛型,十分
阅读全文
摘要:码点与代码单元 java string有两种判定字符的方式,一种是以码点,一种以代码单元,简单讲,码点就是真正的字符,代码单元是按大小即char型长度2个字节划分字符串。 所以length和charat方法都不能正确的表示我们所认为的字符数量个字符位置 关于 Character 摘自jdk文档 ch
阅读全文
摘要:GIT 局限性 不要用git管理二进制文件 所有的版本控制系统,其实只能跟踪文本文件的改动,而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,例如记录图片从 100KB 改成了 120KB,但是并不知道具体文件改了什么。 不要使用git管理
阅读全文
摘要:这个代码是求x^(-1/2),使用牛顿迭代法迭代求解, 神奇的是其效率精度比默认函数还要高。 其中神秘的0x5f375a86是迭代的初始值,理论上可以使任意值,从它开始向最终结果逼近。 通过枚举可以验证选择0x5f375a86的精度最高。
阅读全文
摘要:可以发现其仅是根据字符内容采用加权求和的方法得到hashcode 特殊的是其选择的质数31,31有什么特殊的含义呢? 经查阅相关资料: 31可以被 JVM 优化,31 * i = (i << 5) - i。 降低哈希算法得冲突率 关于第二点,由于int仅32位,而字符串是无限的,所以必定会出现冲突,
阅读全文
摘要:HashSet在执行add时会首先根据目标类的hashcode判断是否有与其hashcode相同的对象,若有则使用equals该对象判断是否与其相同。 HashSet保证了元素的唯一性, 我们可以通过修改目标类的hashcode和equals函数来改变对唯一性的判断标准。 需要注意的是object类
阅读全文
摘要:从项目目录来看 ,分级为project-module-package-classname.java 其中.java文件中包含至多一个publicclass.class文件和多个普通.class文件 .java文件名必须与publicclass类名相同,若无publicclass则可与任意普通类相同
阅读全文
摘要:先按从基类到导出类的顺序初始化静态域(之前已经初始化过的静态域不再初始化) 再按从基类到导出类的顺序初始化类,即基类普通字段+基类构造器主体+导出类字段+导出类主体... grandfatherstatic1grandfatherstatic2fatherstatic1fatherstatic2so
阅读全文