|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
- 发信人: Compiler (编译器), 信区: Java
- 标 题: Re: 如何实现链表等数据结构?
- 发信站: BBS 水木清华站 (Fri Jan 29 22:19:32 1999)
- Java中并非没有指针和引用,事实上,Java中的对象全部是由指针("引用")
- 在"堆"中进行内存分配的(与C++不同,后者可以在"栈"中直接生成对象,
- 但是这种对象不适于进行多态操作).
- C++中既有指针,又有引用,指针和引用在实现上有共同点,他们的最大区别
- 在于,指针可以进行运算,而引用不行,所以,引用要比指针安全的多.
- 在很多Java的书籍中,都会出现"引用"一词.或者说Java有指针,只是
- 其指针不能参加运算.这两种说法在本质上是一致的.
- 链表等数据结构是必须由指针来完成的,但是在链表的的操作中,涉及的
- 是内存的分配和对象的联系,几乎不会,也不提倡使用指针加减法等运算.
- 所以,用Java的引用是完全可以实现的.
- 我认为,数据结构中指针的加减法运算主要使用鲁棒性来换取速度,
- 数据结构是完全可以用引用实现的.至于使用Java天然提供的predefined classes,
- 自然更好.
- 一点陋见,欢迎指正.
- 【 在 lenlon (九天) 的大作中提到: 】
- : 在JAVA中由于没有指针和引用,无法实现许多传统的数据结构,
- : 如链表、二叉树等,有没有什么变通的办法?
- 发信人: Winobject (无忌), 信区: Java
- 标 题: Re: 如何实现链表等数据结构?
- 发信站: BBS 水木清华站 (Sun Jan 31 10:01:32 1999)
- 【 在 Compiler (编译器) 的大作中提到: 】
- : Java中并非没有指针和引用,事实上,Java中的对象全部是由指针("引用")
- >>>指针和引用是不一样的,Java 没有指针,但有引用.
- >>>可以利用引用来生成链表.
- : 在"堆"中进行内存分配的(与C++不同,后者可以在"栈"中直接生成对象,
- : 但是这种对象不适于进行多态操作).
- : C++中既有指针,又有引用,指针和引用在实现上有共同点,他们的最大区别
- : 在于,指针可以进行运算,而引用不行,所以,引用要比指针安全的多.
- : 在很多Java的书籍中,都会出现"引用"一词.或者说Java有指针,只是
- : 其指针不能参加运算.这两种说法在本质上是一致的.
- : 链表等数据结构是必须由指针来完成的,但是在链表的的操作中,涉及的
- : 是内存的分配和对象的联系,几乎不会,也不提倡使用指针加减法等运算.
- : 所以,用Java的引用是完全可以实现的.
- : 我认为,数据结构中指针的加减法运算主要使用鲁棒性来换取速度,
- : 数据结构是完全可以用引用实现的.至于使用Java天然提供的predefined classes,
- : 自然更好.
- : 一点陋见,欢迎指正.
- 发信人: proger (大飞), 信区: Java
- 标 题: Re: 如何实现链表等数据结构?
- 发信站: BBS 水木清华站 (Sun Jan 31 11:40:56 1999)
- 当然,我就做过链表,很简单就可以实现的。用Vector太不爽了。
- public class chain
- {
- chain next;
- int content;
- ....
- }
- 就可以了嘛;不过始终不太爽,因为常常会被引用和对象搞糊涂:(
- 【 在 Compiler (编译器) 的大作中提到: 】
- : Java中并非没有指针和引用,事实上,Java中的对象全部是由指针("引用")
- : 在"堆"中进行内存分配的(与C++不同,后者可以在"栈"中直接生成对象,
- : 但是这种对象不适于进行多态操作).
- : C++中既有指针,又有引用,指针和引用在实现上有共同点,他们的最大区别
- : 在于,指针可以进行运算,而引用不行,所以,引用要比指针安全的多.
- : 在很多Java的书籍中,都会出现"引用"一词.或者说Java有指针,只是
- : 其指针不能参加运算.这两种说法在本质上是一致的.
- : 链表等数据结构是必须由指针来完成的,但是在链表的的操作中,涉及的
- : 是内存的分配和对象的联系,几乎不会,也不提倡使用指针加减法等运算.
- : 所以,用Java的引用是完全可以实现的.
- : 我认为,数据结构中指针的加减法运算主要使用鲁棒性来换取速度,
- : 数据结构是完全可以用引用实现的.至于使用Java天然提供的predefined classes,
- : 自然更好.
- : 一点陋见,欢迎指正.
- 发信人: Compiler (编译器), 信区: Java
- 标 题: Re: 如何实现链表等数据结构?
- 发信站: BBS 水木清华站 (Sun Jan 31 13:36:52 1999)
- 在技术实现上,指针和引用并无不同,同是对象的地址
- 只不过引用比指针有更强的安全性.
- 在很多书籍中(包括Sun)引用和指针的关系已经说明.
- 总的来说,引用不是指针,但是引用是不能进行运算的特殊指针.
- 【 在 Winobject (无忌) 的大作中提到: 】
- 发信人: Compiler (编译器), 信区: Java
- 标 题: Re: 如何实现链表等数据结构?
- 发信站: BBS 水木清华站 (Sun Jan 31 13:39:13 1999)
- 【 在 proger (大飞) 的大作中提到: 】
- : 当然,我就做过链表,很简单就可以实现的。用Vector太不爽了。
- : public class chain
- : {
- : chain next;
- : int content;
- : ....
- : }
- : 就可以了嘛;不过始终不太爽,因为常常会被引用和对象搞糊涂:(
- ^^^^^^^^^^^^^^^没有什么,其实这里的next和指针完全一样,只是
- 不能进行加一,减一等运算而已.
- 发信人: Winobject (无忌), 信区: Java
- 标 题: Re: 如何实现链表等数据结构?
- 发信站: BBS 水木清华站 (Sun Jan 31 19:34:15 1999)
- 【 在 Compiler (编译器) 的大作中提到: 】
- : 在技术实现上,指针和引用并无不同,同是对象的地址
- >>>>>指针是对象的地址的地址,即它指向对象的地址,
- >>>>>引用是对象的地址,即它指向对象本身!
- : 只不过引用比指针有更强的安全性.
- : 在很多书籍中(包括Sun)引用和指针的关系已经说明.
- : 总的来说,引用不是指针,但是引用是不能进行运算的特殊指针.
- 发信人: Compiler (编译器), 信区: Java
- 标 题: Re: 如何实现链表等数据结构?
- 发信站: BBS 水木清华站 (Sun Jan 31 20:54:51 1999)
- 【 在 Winobject (无忌) 的大作中提到: 】
- 【 在 Compiler (编译器) 的大作中提到: 】
- : 在技术实现上,指针和引用并无不同,同是对象的地址
- >>>>>指针是对象的地址的地址,即它指向对象的地址,
- >>>>>引用是对象的地址,即它指向对象本身!
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^这只是理解问题,在技术上,引用变量
- 和指针变量中存储的都是对象的首地址.
- 区别是编译器对他们的保护程度.
- : 只不过引用比指针有更强的安全性.
- : 在很多书籍中(包括Sun)引用和指针的关系已经说明.
- : 总的来说,引用不是指针,但是引用是不能进行运算的特殊指针.
- 发信人: Winobject (无忌), 信区: Java
- 标 题: Re: 如何实现链表等数据结构?
- 发信站: BBS 水木清华站 (Mon Feb 1 09:51:52 1999)
- 【 在 Compiler (编译器) 的大作中提到: 】
- : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^这只是理解问题,在技术上,引用变量
- : 和指针变量中存储的都是对象的首地址.
- : 区别是编译器对他们的保护程度.
- 否,按你的说法,对象的名与指向该对象的指针将没有区别!
- 举个例子:
- 对象A,对象的引用A_ref,指向该对象的指针A_point,首先,
- 它们实际上均是符号地址,假设对象A在内存中的首地址为B243:1000;
- 则A为B243:1000,A_ref也为B243:1000,而A_point则可以为一
- 随意地址,假设为B243:1200;只要该地址中的内容为B243:1000.
- 所以 ,引用是直接的指向对象,相当于对象的别名,指针是间接的
- 指向对象.
- 发信人: Compiler (编译器), 信区: Java
- 标 题: Re: 如何实现链表等数据结构?
- 发信站: BBS 水木清华站 (Mon Feb 1 10:17:54 1999)
- 【 在 Winobject (无忌) 的大作中提到: 】
- 【 在 Compiler (编译器) 的大作中提到: 】
- : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^这只是理解问题,在技术上,引用变量
- : 和指针变量中存储的都是对象的首地址.
- : 区别是编译器对他们的保护程度.
- >否,按你的说法,对象的名与指向该对象的指针将没有区别!
- >举个例子:
- > 对象A,对象的引用A_ref,指向该对象的指针A_point,首先,
- >它们实际上均是符号地址,假设对象A在内存中的首地址为B243:1000;
- >则A为B243:1000,A_ref也为B243:1000,而A_point则可以为一
- >随意地址,假设为B243:1200;只要该地址中的内容为B243:1000.
- >所以 ,引用是直接的指向对象,相当于对象的别名,指针是间接的
- >指向对象.
- 在32位系统中,A_ref和A_point同为32位的变量.他们的地址都是任意的.只要其
- 内容是B234:1000即可.A_point是一个独立的变量,它的地址同A_ref一样是编译
- 器分配的,并不与其指向的内容相同.
- 发信人: proger (大飞), 信区: Java
- 标 题: Re: 如何实现链表等数据结构?
- 发信站: BBS 水木清华站 (Tue Feb 2 21:02:06 1999)
- 如果在java中有:
- MyClass mc;
- 那么mc的内容就是MyClass的地址。
- 从mc=new MyClass();可以知道它就是一个指针。只是在用mc.MyValue1时,
- 解释器自动理解为指针指向的内容罢了。初用java时被她这个特性搞糊涂过。
- 【 在 Compiler (编译器) 的大作中提到: 】
- : 在32位系统中,A_ref和A_point同为32位的变量.他们的地址都是任意的.只要其
- : 内容是B234:1000即可.A_point是一个独立的变量,它的地址同A_ref一样是编译
- : 器分配的,并不与其指向的内容相同.
- 发信人: qinsj (qinsj), 信区: Java
- 标 题: Re: 如何实现链表等数据结构?
- 发信站: BBS 水木清华站 (Thu Feb 4 20:21:34 1999)
- 【 在 Compiler (编译器) 的大作中提到:
- JAVA 是可以实现链表的,如:
- public class Node{
- int data;
-
- Node prvNode;
- Node nextNode;
- public Node(int data){
- this.data = data;
- prvNode = null;
- nextNode = null;
- }
- }
- ...
- public class NodeList{
- protected Node node;
- public void list(){
- if(node == null)return;
- for(Node n = node; n != null; n = n.nextNode){
- System.out.println("data = "+n.data);
- }
- }
- public void addNode(Node n){
- if(node = null)
- node = n;
- else{
- node.prvNode = n;
- node = n;
- }
- }
- public void deleteNode(Node n){
- if(Node nod = node,prv = null;nod != null;
- prv = nod,nod = nod.nextNOde){
- if(node.equals(n)){
- if(prv != null){
- prv.nextNode = nod.nextNode;
- }else{
- node = nod.nextNode;
- }
- break;
- }
- }
- }
- }
- 望适当修改.
- 发信人: Compiler (编译器), 信区: Java
- 标 题: Re: 如何实现链表等数据结构?
- 发信站: BBS 水木清华站 (Thu Feb 4 21:22:28 1999)
- 正是,推荐电子工业出版社的<<Java算法>>,Scott Robert Ladd著
复制代码 |
|