如何阅读Java源码 阅读java的真实体会
Java创建内部类对象
Java爬虫实战(二):抓取一个视频网站上2015年所有电影的下载链接
用Java实现网易云音乐爬虫
揭秘Java网络爬虫程序原理
Java 动手写爬虫: 一、实现一个最简单爬虫
GitHub 上有哪些优秀的 Java 爬虫项目?
如何正确遍历删除List中的元素,你会吗?
对List集合中的元素进行排序
Java List的并集 交集 差集 去重复并集
使用 Executors,ThreadPoolExecutor,创建线程池,源码分析理解
如何理解阿里开发规范中这句话?SimpleDateFormat 是线程不安全的类,一般不要定义为static变量
Java几种常见的编码方式
序列化和反序列化的底层实现原理是什么?
Java序列化 - 二进制格式详解
Java序列化算法
Java对象序列化底层原理源码解析
Java正则表达式, 提取双引号中间的部分
java 正则表达式 获取双引号中到字符串
解决java.net.UnknownHostException: 主机名: 主机名: 未知的名称或服务
java.net.UnknownHostException: xxx: 未知的名称或服务
java的split方法可以实现同时使用多个分隔符劈开字符串方法:
java – 如何直接将Double转换为int?
在Java中只获取一个数组的一部分?
java中关于int值的奇偶判断
java那些小事—用偶数做判断,不要用基数做判断
如何判断一个数是否是NaN
如何在java中将float转换为bigDecimal?
BigDecimal如何转换成float数据类型?
NumberFormatException相关的error总结
Java:数值-字符串转换(String转Double)
怎样将不定长的String数组转化成相应的double数组?
eclipse中配置jdk
一台电脑如何安装多个版本的JDK
Java虚拟机初始化一个类时会经过加载,编译,运行三个阶段
静态代码域(静态代码块, 静态变量)在类加载阶段即加载,它们的优先级相同,在类加载阶段只加载一次,并且是按顺序加载
在调用一个类的构造器时, 先调用父类构造器(先调用构造代码块, 再调用构造器), 再调用子类构造器
class A {
// 构造函数
public A() {
System.out.println("class A");
}
// 构造代码块
{
System.out.println("I'm A class");
}
// 静态代码块
static {
System.out.println("class A static");
}
}
运行下面代码,输出的结果是()
的执行,并且按照各静态代码块放在类中的顺序执行。
在Java中,字符只以一种形式存在,那就是Unicode(不选择任何特定的编码,直接使用他们在字符集中的编号,这是统一的唯一的方法)。
在Java中指在JVM中,在内存中,在你的代码里声明的每一个char, String类型的变量中Reader和Writer类使用的是GBK编码
Java 反射:可以在运行时获取类 or 对象的相关信息。
以下哪些继承自 Collection 接口
Java集合必会14问(精选面试题整理)
这几道Java集合框架面试题在面试中几乎必问
Java 基础:hashCode方法
深入解析Java对象的hashCode和hashCode在HashMap的底层数据结构的应用
Java提高篇——equals()与hashCode()方法详解
PriorityBlockingQueue
Java并发学习(二十四)-PriorityBlockingQueue分析
HashMap中散列表大小的计算依赖于tableSizeFor()函数,而该函数的作用是返回大于等于目标值的2的幂级数(通过移位实现),所以HashMap散列表的大小为2的整数次幂
int值的表示范围为-2^31 - 2^31 -1,HashMap中散列表的大小都为2的整数次幂且不能超过int值的最大范围,所以MAXIMUM_CAPACITY设置为2^30
ArrayList | Vector |
---|---|
不安全 | 安全 |
扩容50% | 扩容100% |
ArrayList | LinkedList |
---|---|
数组 | 链表 |
适合检索和在末尾插入or删除 | 适合在中间插入or删除 |
ArrayList和LinkedList的remove()和contains()方法都依赖equals()方法
LinkedList还实现了Queue接口,他还提供peek()、poll()、offer()等方法(offer()、peek()、poll()不抛异常)
底层hash表(HashSet的contains()和remove()依赖和顺从于equals()方法)
若两个元素的hash值不同,则一定不是同一个元素;
若两个元素的hash值想通过,则判断equals():
若equals()相同,则是同一个对象;
若equals()不同,则不是同一个对象;
HashSet不是线程安全的(从哪里看出来的?)
TreeSet的特点是可以对其中的元素进行排序。
一种是放进TreeSet中的元素必须具有比较性,集合的底层结构是二叉树,保证元素唯一性的方法是compareTo()方法返回0。
另一种情况是元素没有比较性,但是集合有比较性,定义一个类,实现Comparator接口,实现一个比较器
树总是平衡的,保证插入、删除、查询的性能O(logN)
HashMap,两次哈希,第一次直接调用key的hashcode()方法,第二次在调用一个函数及hash(key.hashcode()),此方法加入高位计算,防止低位不变高位变化时造成的冲突
当HashMap的get()方法返回null时,即可以表示HashMap中没有该键,也可以表示该键对应的值为null,所以HashMap中不能用get()方法来判断是否存在某个键,而应该用containsKey()
Java8 HashMap源码分析
java8 HashMap源码 详细研读
HashMap的实现用hash表
TreeMap的实现用红黑树
ArrayBlockingQueue: 一个由数组实现的有界阻塞队列,其构造函数必须带一个int参数,来指明其大小。其所含的对象是由FIFO顺序排列的
LinkedBlockingQueue: 大小不一定,若构造函数传入int,则BlockingQueue有大小限制,否则大小为Integer.MAX_VALUE,其所含的对象是由FIFO顺序
PriorityBlockingQueue: 类似于LinkedBlockingQueue,但不是FIFO,而是自然顺序或比较器的顺序
SynchronizedQueue: 对其的操作必须是放和取交替完成的
static变量
static方法
static代码块
static类
Java中的static关键字解析
java static关键字理解
final变量
final方法
final类
浅析Java中的final关键字
深入理解Java中的final关键字
Java并发编程:volatile关键字解析
Java volatile 关键字底层实现原理解析