1K+ 次浏览
finalize() 方法是 Object 类中的预定义方法,它是受保护的。重写 finalize() 方法的目的是为了在对象被垃圾回收之前,包含清理代码或释放系统资源。如果我们重写 finalize() 方法,则有责任显式调用 finalize() 方法。JVM 或任何给定对象只能调用一次 finalize() 方法。语法:protected void finalize() throws Throwable 示例:public class FinalizeMethodTest { protected void finalize() throws Throwable { try { System.out.println("调用 finalize() 方法 ... 阅读更多
JButton 是 AbstractButton 的子类,可用于向 GUI 应用程序添加与平台无关的按钮。当按下或单击按钮时,JButton 可以生成 ActionListener 接口,它还可以生成 MouseListener 和 KeyListener 接口。我们可以通过重写 MouseListener 接口的 mouseEntered() 方法来实现鼠标悬停在 JButton 上时的翻转效果。语法:void mouseEntered(MouseEvent e) 示例:import java.awt.*; import java.awt.event.*; import javax.swing.*; public class RollOverButtonTest extends JFrame { private JButton button; public RollOverButtonTest() { setTitle("RollOverButton 测试"); button = new JButton("翻转按钮"); button.addMouseListener(new MouseAdapter() { ... 阅读更多
5K+ 次浏览
在 Java 中,死锁是指两个或多个线程永远阻塞的情况。死锁条件至少需要两个线程和两个或更多资源。如何避免死锁 避免嵌套锁 - 死锁主要发生在我们向多个线程提供锁时。如果我们已经向一个线程提供了锁,则应避免向多个线程提供锁。避免不必要的锁 - 我们只需要对那些需要的成员进行加锁。不必要地加锁可能会导致死锁。使用 Thread.join() - 当一个线程等待另一个线程完成时,会出现死锁情况。如果 ... 阅读更多
469 次浏览
我们知道,二分查找法是最合适和有效的排序算法之一。它适用于已排序的序列。该算法很简单,它只需找到中间的元素,然后将列表分成两部分,然后移动到左子列表或右子列表。我们知道它的算法。现在我们将看到如何在多线程环境中使用二分查找技术。线程数取决于系统中存在的内核数。让我们看看代码以了解其思想。示例#include #define MAX 16 #define MAX_THREAD 4 using namespace ... 阅读更多
240 次浏览
假设我们有一个二进制数,它是数字 n 的表示。我们必须找到一个比 n 大但最小的二进制数的表示,它也具有相同数量的 0 和 1。因此,如果数字是 1011(十进制为 11),则输出将是 1101(13)。可以使用下一个排列计算来找到这个问题。让我们看看算法以了解其思想。算法 nextBin(bin) − 开始 len := bin 的长度 对于 i 在范围 len-2 到 1,执行 如果 bin[i] 为 0 且 bin[i+1] ... 阅读更多
274 次浏览
在 CLRS 书中,BFS 算法是用向量和队列描述的。我们必须使用 C++ STL 实现该算法。让我们首先看看算法。算法 BFS(G, s) − 开始 对于 G.V - {s} 中的每个顶点 u,执行 u.color := 白色 u.d := 无穷大 u.p := NIL 完成 s.color := 绿色 s.d := 0 s.p := NIL Q := NULL 将 s 插入 Q 当 Q 不为空时,执行 u = 从 Q 中删除 对于 ... 阅读更多
484 次浏览
这里我们将看到情侣数。这是一对数字,其中一个数字的真除数之和比另一个数字大 1。我们必须找到这些对例如,对是这样的 (48, 75)。因此 48 的除数是 {1, 2, 3, 4, 6, 8, 12, 16, 24},总和是 76。类似地,75 的除数是 {1, 3, 5, 15, 25},总和是 49。算法 BetrothedPairs (n) − 开始 对于 num 在范围 1 到 n,执行 sum := 1 对于 ... 阅读更多
129 次浏览
这里我们将看到鲍姆-斯威特序列。此序列是一个二进制序列。如果数字 n 具有奇数个连续的 0,则第 n 位将为 0,否则第 n 位将为 1。我们有一个自然数 n。我们的任务是找到鲍姆-斯威特序列的第 n 项。因此,我们必须检查它是否具有任何长度为奇数的连续零块。如果数字是 4,则该项将为 1,因为 4 是 100。因此它有两个(偶数)零。算法 BaumSweetSeqTerm (G, s) − 开始 定义位序列 seq ... 阅读更多
301 次浏览
这里我们将看到递归函数调用需要多少辅助空间。以及它与普通函数调用有何不同?假设我们有一个这样的函数 −long fact(int n){ if(n == 0 || n == 1) return 1; return n * fact(n-1); }此函数是递归函数。当我们像 fact(5) 这样调用它时,它将在堆栈中存储地址,如下所示:fact(5) ---> fact(4) ---> fact(3) ---> fact(2) ---> fact(1)由于递归函数不断地调用自身,地址被添加到堆栈中。因此,如果函数是 ... 阅读更多
218 次浏览
这里我们将看到一个有趣的问题。我们有一个包含 N 个元素的数组。我们必须执行如下所示的查询 Q:Q(start, end) 表示从开始到结束,数字 'p' 出现的次数恰好为 'p' 次。因此,如果数组是这样的:{1, 5, 2, 3, 1, 3, 5, 7, 3, 9, 8},并且查询是:Q(1, 8) - 这里 1 出现一次,3 出现 3 次。所以答案是 2 Q(0, 2) - 这里 1 出现一次。所以答案是 1 算法 query(s, e) − 开始 ... 阅读更多