Java实现单例模式与二维数组查找
5星 · 超过95%的资源 需积分: 8 195 浏览量
更新于2024-07-20
收藏 501KB PDF 举报
"剑指offer--java,包含面试题2:实现单例模式和面试题3:二维数组中的查找"
在Java编程中,"剑指offer"是一系列针对程序员面试的经典问题集,旨在提升面试者对编程基础、算法和设计模式的理解。以下是这两个面试题的详细解析:
面试题2:实现单例模式
单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。题目中提到了两种常见的Java单例实现方式:饿汉式和懒汉式。
1. 饿汉式单例类:
饿汉式单例在类加载时就完成了初始化,所以类加载比较慢,但获取单例的速度快,线程安全。代码如下:
```java
public class SingletonClass {
private static final SingletonClass instance = new SingletonClass();
// 私有构造函数
private SingletonClass() {}
public static SingletonClass getInstance() {
return instance;
}
}
```
这里,`instance` 在类加载时就被创建,因此多个线程同时访问 `getInstance()` 也不会有问题。
2. 懒汉式单例模式:
懒汉式单例在第一次调用 `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;
}
}
```
这里的懒汉式单例使用了同步关键字 `synchronized`,确保了线程安全,但可能导致性能下降,因为每次调用 `getInstance()` 都会进行同步。
面试题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;
}
// 主方法用于测试
public static void main(String[] args) {
int[][] testarray = new int[4][4];
// 初始化测试数组...
}
}
```
在这个算法中,如果当前元素大于目标值,说明目标值可能在当前行的左侧或下方;如果当前元素小于目标值,说明目标值可能在当前列的下方或右侧。这样,每次迭代都可以缩小搜索范围,直到找到目标值或搜索完毕。
以上是"剑指offer"中关于单例模式和二维数组查找的Java实现,它们考察的是设计模式理解和高效算法的应用,对于准备面试的开发者来说是非常重要的知识点。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2019-07-08 上传
2018-12-20 上传
2021-09-30 上传
2022-08-04 上传
2018-01-15 上传
2021-06-30 上传
大号小白兔
- 粉丝: 343
- 资源: 24
最新资源
- 程序靠边自动隐藏窗口-易语言
- Pipo:用于从Firebase提取数据并显示的Android项目
- school_project
- flutter_google_ml_vision:适用于Google ML Kit Vision的Flutter插件
- codeandsewn.github.io
- CheckHealth.github.io
- 林森塔
- Happy-Holi
- Prog2_Reseau:Prog2 Java LP SIL的小型项目Vianey Benjamin-Bodet Cindy
- c# 锁屏系统
- hackgt21-whispermom:HackGT'21的临时仓库
- 网址:霓虹灯线
- Webpack_PW_Anul_2
- 能否上网-易语言
- nonogram:基于遗传算法的非图求解器
- 控制