Java版《剑指offer》面试题:单例模式与二维数组查找
需积分: 50 90 浏览量
更新于2024-07-20
1
收藏 501KB PDF 举报
"剑指offer(java版).pdf,涵盖了Java编程语言中的面试题,包括设计模式和数组操作等主题。"
在Java编程中,单例模式是一种常用的创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点。该模式在很多场景下非常有用,比如配置管理、线程池或者缓存服务等。在《剑指offer》中,提到了两种实现单例模式的方法:饿汉式和懒汉式。
1. 饿汉式单例类:
饿汉式单例类在类加载时就完成了初始化,因此是线程安全的。其特点是类加载时就创建了单例对象,不会出现多线程下的安全性问题,但可能会造成不必要的内存浪费,因为即使在未使用单例时,对象就已经被创建了。
```java
public class SingletonClass {
private static final SingletonClass instance = new SingletonClass();
private SingletonClass() {}
public static SingletonClass getInstance() {
return instance;
}
}
```
2. 懒汉式单例模式:
懒汉式单例类在第一次调用`getInstance()`方法时才创建单例对象,这样可以延迟对象的初始化,节约资源。但原始的懒汉式实现是线程不安全的,如果多个线程同时进入`if (instance == null)`判断,可能导致创建多个实例。为了解决这个问题,可以使用`synchronized`关键字来同步`getInstance()`方法,使其变为线程安全的。
```java
public class SingletonClass {
private static SingletonClass instance = null;
private SingletonClass() {}
public synchronized static SingletonClass getInstance() {
if (instance == null) {
instance = new SingletonClass();
}
return instance;
}
}
```
面试题3涉及的是在一个特定的二维数组中查找特定整数的问题。这个二维数组的特点是每一行从左到右递增,每一列从上到下递增,这样的特性使得我们可以采用一种类似于二分查找的方法来提高查找效率。
```java
public class Find {
public static boolean find(int[][] array, int number) {
if (array == null) {
return false;
}
int column = array[0].length - 1;
int row = 0;
while (row < array.length && column >= 0) {
if (array[row][column] == number) {
return true;
}
if (array[row][column] > number) {
column--;
} else {
row++;
}
}
return false;
}
// main method for testing
public static void main(String[] args) {
int[][] testArray = new int[4][4];
// initialize the testArray...
}
}
```
在这个方法中,我们从数组的右上角开始,如果当前元素大于目标值,我们就向左移动一列;如果小于目标值,我们就向下移动一行。这样,每次移动都能缩小查找范围,直到找到目标值或遍历完整个数组。这种方法利用了数组的有序性,提高了查找效率。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2021-03-16 上传
2021-12-12 上传
2024-01-04 上传
2024-03-18 上传
2021-09-07 上传
2021-09-13 上传
月落西楼
- 粉丝: 11
- 资源: 3
最新资源
- 全国江河水系图层shp文件包下载
- 点云二值化测试数据集的详细解读
- JDiskCat:跨平台开源磁盘目录工具
- 加密FS模块:实现动态文件加密的Node.js包
- 宠物小精灵记忆配对游戏:强化你的命名记忆
- React入门教程:创建React应用与脚本使用指南
- Linux和Unix文件标记解决方案:贝岭的matlab代码
- Unity射击游戏UI套件:支持C#与多种屏幕布局
- MapboxGL Draw自定义模式:高效切割多边形方法
- C语言课程设计:计算机程序编辑语言的应用与优势
- 吴恩达课程手写实现Python优化器和网络模型
- PFT_2019项目:ft_printf测试器的新版测试规范
- MySQL数据库备份Shell脚本使用指南
- Ohbug扩展实现屏幕录像功能
- Ember CLI 插件:ember-cli-i18n-lazy-lookup 实现高效国际化
- Wireshark网络调试工具:中文支持的网口发包与分析