Java实现剑指Offer中的单例模式与二维数组查找
需积分: 10 132 浏览量
更新于2024-07-20
收藏 501KB PDF 举报
"提供《剑指offer》书中面试题的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()`方法时才进行实例化。为了保证线程安全,这里使用了`synchronized`关键字。代码如下:
```java
public class SingletonClass {
private static SingletonClass instance = null;
// 私有构造函数
private SingletonClass() {}
public synchronized static SingletonClass getInstance() {
if (instance == null) {
instance = new SingletonClass();
}
return instance;
}
}
```
懒汉式解决了饿汉式的内存浪费问题,但同步锁会带来性能影响,因为每次调用`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];
// 初始化数组...
System.out.println(find(testArray, 5)); // 输出:false
}
}
```
这个算法的时间复杂度为O(m+n),其中m和n分别是数组的行数和列数,因为它最多只需要遍历整个数组一次。在实际应用中,这种算法适用于已排序或部分有序的数据结构,可以快速定位目标值。
2023-10-26 上传
2023-09-18 上传
2023-07-16 上传
2023-07-22 上传
2023-12-04 上传
2024-07-18 上传
![](https://profile-avatar.csdnimg.cn/61b55b2dbfc94679aa4f9af27eb42bb5_morphy8.jpg!1)
Morphy
- 粉丝: 0
- 资源: 8
最新资源
- 多模态联合稀疏表示在视频目标跟踪中的应用
- Kubernetes资源管控与Gardener开源软件实践解析
- MPI集群监控与负载平衡策略
- 自动化PHP安全漏洞检测:静态代码分析与数据流方法
- 青苔数据CEO程永:技术生态与阿里云开放创新
- 制造业转型: HyperX引领企业上云策略
- 赵维五分享:航空工业电子采购上云实战与运维策略
- 单片机控制的LED点阵显示屏设计及其实现
- 驻云科技李俊涛:AI驱动的云上服务新趋势与挑战
- 6LoWPAN物联网边界路由器:设计与实现
- 猩便利工程师仲小玉:Terraform云资源管理最佳实践与团队协作
- 类差分度改进的互信息特征选择提升文本分类性能
- VERITAS与阿里云合作的混合云转型与数据保护方案
- 云制造中的生产线仿真模型设计与虚拟化研究
- 汪洋在PostgresChina2018分享:高可用 PostgreSQL 工具与架构设计
- 2018 PostgresChina大会:阿里云时空引擎Ganos在PostgreSQL中的创新应用与多模型存储