Java 面试题 —— java 源码
1. 静态工厂方法
静态工厂方法不必在每次调用它们的时候都创建一个新的对象;
Boolean.valueOf(boolean):
public final class Boolean {public static final Boolean TRUE = new Boolean(true);public static final Boolean FALSE = new Boolean(false);public static Boolean valueOf(boolean b) {return (b ? TRUE : FALSE);} }
2. ArrayList 长度的动态拓展
构造函数:
// 底层数据结构,定长数组 private transient Object[] elementData;public ArrayList(int initialCapacity) {super();if (initialCapacity < 0)throw new IllegalArgumentException("Illegal Capacity: "+initialCapacity);this.elementData = new Object[initialCapacity];//属性指向新建长度为初始容量的临时数组 }// 使用初始容量10构造一个空列表 public ArrayList() {this(10); }/ *构造包含利用collection的迭代器按顺序返回的指定collection元素的列表* @param c 集合,它的元素被用来放入列表t* @throws NullPointerException 如果指定集合为 null*/ public ArrayList(Collection<? extends E> c) {elementData = c.toArray(); //用Collection初始化数组elementDatasize = elementData.length;if (elementData.getClass() != Object[].class)elementData = Arrays.copyOf(elementData, size, Object[].class); }
动态拓展 :
为了实现这一机制,java 引进了 Capacity 和 size 概念,以区别数组的 length。为了保证用户增加新的列表对象,java设置了最小容量(minCapacity),通常情况上,它大于列表对象的数目,所以 Capactiy 虽然就是底层数组的长度(length),但是对于最终用户来讲,它是无意义的。而size存储着列表对象的数量,才是最终用户所需要的。为了防止用户错误修改,这一属性被设置为privae的,不过可以通过size()获取。```
private void grow(int minCapacity) {// overflow-conscious codeint oldCapacity = elementData.length;int newCapacity = oldCapacity + (oldCapacity >> 1);//新容量扩大到原容量的1.5倍,右移一位相关于原数值除以2。if (newCapacity - minCapacity < 0)newCapacity = minCapacity;if (newCapacity - MAX_ARRAY_SIZE > 0)newCapacity = hugeCapacity(minCapacity);// minCapacity is usually close to size, so this is a win:elementData = Arrays.copyOf(elementData, newCapacity);
}
private static int hugeCapacity(int minCapacity) {if (minCapacity < 0) // overflowthrow new OutOfMemoryError();return (minCapacity > MAX_ARRAY_SIZE) ?Integer.MAX_VALUE :MAX_ARRAY_SIZE;//MAX_ARRAY_SIZE和Integer.MAX_VALUE为常量,详细请参阅下面的注解
}
```
Java 面试题 —— java 源码相关推荐
- 爆火的Java面试题-kafka源码解析与实战豆瓣
1 基础 为什么 Java 中只有值传递? int 范围?float 范围? hashCode 与 equals,什么关系? String StringBuffer 和 StringBuilder 的 ...
- java线程实例题_java线程相关试题实例源码代码
java线程相关试题实例源码代码. /** * 计算输出其他线程锁计算的数据 */ class ThreadA { public static void main(String[] args) { T ...
- 计算机毕业设计Java金融业撮合交易系统(源码+系统+mysql数据库+lw文档)
计算机毕业设计Java金融业撮合交易系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java金融业撮合交易系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S ...
- 计算机毕业设计Java藏宝阁游戏交易系统(源码+系统+mysql数据库+lw文档)
计算机毕业设计Java藏宝阁游戏交易系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java藏宝阁游戏交易系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S ...
- 计算机毕业设计Java宠物爱心驿站(源码+系统+mysql数据库+lw文档)
计算机毕业设计Java宠物爱心驿站(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java宠物爱心驿站(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S架构 开发语 ...
- 计算机毕业设计Java多媒体素材管理系统(源码+系统+mysql数据库+lW文档)
计算机毕业设计Java多媒体素材管理系统(源码+系统+mysql数据库+lW文档) 计算机毕业设计Java多媒体素材管理系统(源码+系统+mysql数据库+lW文档) 本源码技术栈: 项目架构:B/S ...
- 计算机毕业设计Java个人财务管理系统(源码+系统+mysql数据库+Lw文档)
计算机毕业设计Java个人财务管理系统(源码+系统+mysql数据库+Lw文档) 计算机毕业设计Java个人财务管理系统(源码+系统+mysql数据库+Lw文档) 本源码技术栈: 项目架构:B/S架构 ...
- 计算机毕业设计Java宠物寄养管理系统(源码+系统+mysql数据库+lw文档)
计算机毕业设计Java宠物寄养管理系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java宠物寄养管理系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S架构 ...
- 计算机毕业设计Java住院管理系统(源码+系统+mysql数据库+Lw文档)
计算机毕业设计Java住院管理系统(源码+系统+mysql数据库+Lw文档) 计算机毕业设计Java住院管理系统(源码+系统+mysql数据库+Lw文档) 本源码技术栈: 项目架构:B/S架构 开发语 ...
- 计算机毕业设计Java高校迎新管理系统(源码+系统+mysql数据库+Lw文档)
计算机毕业设计Java高校迎新管理系统(源码+系统+mysql数据库+Lw文档) 计算机毕业设计Java高校迎新管理系统(源码+系统+mysql数据库+Lw文档) 本源码技术栈: 项目架构:B/S架构 ...
最新文章
- ORACLE等待事件:direct path write
- 也谈Javascript的效率,createElement和innerHTML,为innerHTML平反
- Java数据结构和算法:图
- 三级计算机系统是什么情况,三级PC技术: 计算机的组成和分类
- Android之运行app提示The application could not be installed: INSTALL_FAILED_TEST_ONLY
- 2639-Bone Collector II (01背包之第k优解)
- 17 操作系统第四章 磁盘管理 磁盘的结构 磁盘调度算法 减少磁盘延迟时间的方法
- Android 系统(83)---屏幕尺寸
- ajax 异步加载 list集合数据
- Windows 平台下Myeclipse 10 中SVN 插件使用教程(TortoiseSVN)
- 设计模式学习笔记之二:观察者模式
- Centos下安装Mongodb
- div section article区分--20150227
- java mp4转码 h264_mp4格式的视频,编码方式mpeg4,转化为h264
- Json汉化-使用JavaScript和百度翻译API免费实现Json文件的汉化
- An工具介绍之3D工具
- 软件开发模式:瀑布与敏捷应用思考
- 解决mysql sum求和返回null问题或IFNULL应用
- 成功实现NAS家庭服务器(流媒体播放、文件共享及下载机)
- 【论文翻译】Cluster Contrast for Unsupervised Person Re-Identification(2021)
热门文章
- Adobe AIR教程:面向iOS设备的原生扩展
- tensorflow 显存 训练_tensorflow手动指定GPU以及显存大小
- php mysql 获取排名,Mysql排序获取排名的实例代码
- java做h5小游戏服务端_神藏西游H5游戏源码服务端+客户端+搭建教程
- Java设计模式与实践
- Keras——Keras简介、安装及backend
- Linux C++11——多线程类thread
- Learn OpenGL(七)——OpenGL中使用着色器的基本步骤及GLSL渲染简单示例
- Qt之HTTP——发送HTTP请求
- Java 基础 引用数据类型 和 流程控制