Java实现单例模式与二维数组查找

5星 · 超过95%的资源 需积分: 11 3 下载量 168 浏览量 更新于2024-07-19 收藏 501KB PDF 举报
"剑指offer java版 - 面试题包括单例模式实现和二维数组查找" 在Java编程中,面试时常会涉及到设计模式和高效算法的考察。本资源主要涵盖两个核心知识点:单例模式的实现和二维数组中的查找。 首先,让我们详细探讨单例模式。单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。在Java中,常见的单例模式实现有两种:饿汉式和懒汉式。 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; } } ``` 面试题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方法用于测试 public static void main(String[] args) { int[][] testArray = new int[4][4]; // 初始化二维数组... } } ``` 这个查找算法利用了数组的特性,从右上角开始遍历,根据当前元素与目标值的关系调整行或列的位置。由于数组有序,这种做法在大多数情况下比简单的暴力遍历更高效。在实际应用中,这种优化对于处理大数据集非常重要,因为它能显著减少搜索时间。