题目一 原题:
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例 1:
输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:[null,null,3,-1]
示例 2:
输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这道题需要我写一个类,类中要使用栈。
第一个问题
是我在构造函数中写了返回值void导致报错,当时没发现,我在类中声明静态的类变量的时候就初始化了栈stack,而不是在构造方法中初始化,所以避免了这个报错。
第二个问题
在静态变量声明的时候就初始化new了stack和在构造方法中才new有什么区别?区别应该只是一个在类被定义的时候就已经初始化stack了,而另一个是在创建类的实例的时候才初始化了stack。
附:
/*
- Java类的主动使用(六种)
- 1.创建类的实例(如 new Test())
- 2.访问某个类或接口的静态变量,或者对该静态变量赋值(如 int b = Test.a 或者 Test.a = b)
- 3.调用类的静态方法(如 Test.doSomething())
- 4.反射(如Class.forName(“”))
- 5.初始化一个类的子类(如class Parent{},class Child extends Parent{},new Child())
- 6.Java虚拟机启动时被标明为启动类的类(如命令行执行"java Test",Test即为启动类)
- 除此之外的所有使用都叫做“被动使用”
- 所有Java虚拟机实例必须在每个类或者接口被java程序“首次主动使用”时才初始化它们。
————————————————
版权声明:本文为CSDN博主「haoshenwang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wanghao109/article/details/49591815
题目二 java中null字符串与字符串长度为0的区别
null字符串不占用内存空间,长度为0的字符串“”是占用内存空间的。
String str = null;中的str不指向任何内存地址;
String str = “”;中的str指向""所在的内存地址。
补充:
编程题中经常遇到,对于数组首先判断:
private static void test(int[] a) {
if (a == null || a.length==0) {
return;
}
}
常见的形式有三种:
语句1:int[] a; //只是声明了一个数组变量,并未初始化,无法使用。
语句2:int[] a = null;//声明了一个数组变量,赋值为 null;
语句3:int[] a = new int[0];//声明并创建一个数组对象,长度为0
上面的三个语句,系统占用的内存依次增多。
语句1,并未初始化,使用会出错:
语句2,虽然初始化,但是一个空指针,没有指向一个有效的数组什么都做不了,无法调用这个对象的方法,会产生空指针异常:
语句3,长度是0,是一个数组对象,只不过没有内容:
所以对于数组,不但要判断它是否为空指针,也需要判断它是否有内容,同时要先判断空指针再判断长度是否为0,顺序不能颠倒,因为空指针没有length属性
————————————————
版权声明:本文为CSDN博主「南淮北安」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/nanhuaibeian/article/details/109899694