中级农民
- 积分
- 248
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2017-12-6
- 最后登录
- 1970-1-1
|
Part3有点tricky, 通过override newNode() 来构造LockDList,然后再进行后面的操作。
一开始想直接把DListNode转换为LockDListNode来利用其中的isLocked这个field进行判断,结果编译器报出cast的错误。其本质是这个Object就是DListNode不能直接cast。
如果想实现cast,那么这个Object必须是LockDListNode,所以只能从源头开始思考就是newNode();
我们可以开始写这个newNode(), 但是它的返回值其实可以是他的父类或者父类的之类。
- /*
- protected LockDListNode newNode(Object item, DListNode prev, DListNode next) {
- return new LockDListNode(item, prev, next);
- }
- */
- protected DListNode newNode(Object item, DListNode prev, DListNode next) {
- return new LockDListNode(item, prev, next);
- }
复制代码
这两种情况都可以通过编译,这一点一些书本上可能有些不同。
如果return type是DListNode, 实质山就是将LockDListNode cast成 DListNode;
改变了return type后,本质每个node都是LockDListNode。
如果需要引用LockDListNode的值,就可以将DListNode cast成 LockDListNode。
其实,这里考虑的一个问题就是 reference variable 的作用, 按照head first java本质相当于一个遥控器, 用来搜寻method, 当你将本质是LockDListNode cast成 DListNode, 实际上得到的是哪个小遥控器, 只能操控DListNode的方法。 只有将其重新cast为LockDListNode,才可以调用里面的method和field。
- /Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/bin/java "-javaagent:/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar=55065:/Applications/IntelliJ IDEA CE.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/tools.jar:/Users/Lim/@inbox/cs61b14/hw/hw4/out/production/hw4 list.TestDList
- Now we are testing DList.
- Here is a list after insertBack 6, 9, 12: [ 6 9 12 ]
- Here is the same list after insertBack(15) and insertFront(3): [ 3 6 9 12 15 ]
- front() should be 3. It is: 3
- front's next should be 6. It is: 6
- front's next's prev should be 3. It is: 3
- After remove the front, the front() should be 6. It is: 6
- After insertBefore() and insertAfter(), The first 3 nodes should be 5,6,8. The list is: [ 5 6 8 9 12 15 ]
- Here is a list after construction: [ ]
- isEmpty() should be true. It is: true
- length() should be 0. It is: 0
- Here is a list after insertFront(3) to an empty list: [ 3 ]
- Here is a list after insertBack(5) on an empty list: [ 5 ]
- Here is a list after insertFront 3, 2, 1: [ 1 2 3 ]
- isEmpty() should be false. It is: false
- length() should be 3. It is: 3
- Here is the same list after insertBack(4): [ 1 2 3 4 ]
- Here is a list after insertBack 6, 7: [ 6 7 ]
- isEmpty() should be false. It is: false
- length() should be 2. It is: 2
- Here is the same list after insertFront(5): [ 5 6 7 ]
- Process finished with exit code 0
复制代码
- /Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/bin/java "-javaagent:/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar=55074:/Applications/IntelliJ IDEA CE.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/tools.jar:/Users/Lim/@inbox/cs61b14/hw/hw4/out/production/hw4 list.TestLockDList
- Now we are testing LockDList.
- Here is a list after insertBack 6, 9, 12: [ 6 9 12 ]
- Here is the same list after insertBack(15) and insertFront(3): [ 3 6 9 12 15 ]
- front() should be 3. It is: 3
- front's next should be 6. It is: 6
- front's next's prev should be 3. It is: 3
- We lockNode front()= 3
- After remove the locked front, the front() should still be 3. It is: 3
- After remove the back, the back() should be 12. It is: 12
- After insertBefore(3) and insertAfter(3), The first 3 nodes should be 5,3,8. The list is: [ 5 3 8 6 9 12 ]
- Here is a list after construction: [ ]
- isEmpty() should be true. It is: true
- length() should be 0. It is: 0
- Here is a list after insertFront(3) to an empty list: [ 3 ]
- Here is a list after insertBack(5) on an empty list: [ 5 ]
- Here is a list after insertFront 3, 2, 1: [ 1 2 3 ]
- isEmpty() should be false. It is: false
- length() should be 3. It is: 3
- Here is the same list after insertBack(4): [ 1 2 3 4 ]
- Here is a list after insertBack 6, 7: [ 6 7 ]
- isEmpty() should be false. It is: false
- length() should be 2. It is: 2
- Here is the same list after insertFront(5): [ 5 6 7 ]
- Process finished with exit code 0
复制代码 |
|