如何实现java数据结构,特别是链式的结构?
不使用api。
java中的引用类似c++的指针,但又有差别,且完全面向对象,实现起来感觉有点复杂。
请教各位有没有完美的实现方法?
不使用api。
java中的引用类似c++的指针,但又有差别,且完全面向对象,实现起来感觉有点复杂。
请教各位有没有完美的实现方法?
解决方案 »
- 问个小问题 C#中 参数可设置成 out、ref java里面有吗
- java.awt.image对象保存问题
- JAVA版音乐播放器YOYOPlayer1.0
- 如何从WindosXP中将日志(应用程序、安全性和系统日志)提取出来,转换成EXCEL格式存储到一个数据库中
- 在jbuilder里新建servlet可以新建几个方法 我一开始新建的时候只加了一个dopost
- 这个程序跌代器用与不用的区别在哪里?
- 请问怎样自己作一个java控件呢
- SCJP里的那些什么300-020,020是什么意思啊?
- 现实的渺茫---未来是什么?
- scanner输入中文问题
- 用poi 生成 xls的问题, 请高手指点一下
- 一个Object和一个STRING相加后变成另一个STRING。。此时如何得到这个Object?
以前都是用c、c++写的
我只是想问程序上的技巧
怎样写出更强壮的java数据结构
不明白你要做什么
我就是想自己写数据结构,而不使用api。
用c、c++写过。
而且我觉得用不同的语言写肯定有不同的技巧。
所以来询问java语言的技巧。
有例子更好。
不过sun写的太全面了,太复杂了
我自己写的肯定只是简单的,不考虑复杂的。
而且我只是想问下你们怎么写的,怎么都回答得不对题?
c很多东西只有api,要自己去写实现
比如链表但是java基本上常用的api功能都有现成的类了,都封装好了
比如链表的话有LinkedLisk,ArrayList等等
哈西表有HashMap,HashTable,HashSet等等....你去查下java的doc,基本上都有
private Node head;
private int size;
private class Node {
Object val;
Node prev, next;
Node(Object o) {
val = o;
}
}
public MyLinkedList() {
head = new Node(null);
head.prev = head.next = head;
}
public boolean add(int index, Object o) {
Node currentNode;
if ((currentNode = nodeAt(index)) == null) return false;
Node newNode = new Node(o);
currentNode.prev.next = newNode;
newNode.prev = currentNode.prev;
newNode.next = currentNode;
currentNode.prev = newNode;
size++;
return true;
}
public boolean add(Object o) {
return add(size, o);
}
public boolean remove(int index) {
Node currentNode = nodeAt(index);
if (currentNode == null || currentNode == head) return false;
currentNode.prev.next = currentNode.next;
currentNode.next.prev = currentNode.prev;
currentNode = null;
size--;
return true;
}
private Node nodeAt(int index) {
if (index > size || index < 0) return null;
Node n = head.next;
for (int i = 0; i < index; i++, n = n.next);
return n;
}
public int getSize() {
return size;
}
public String toString() {
StringBuffer result = new StringBuffer();
result.append('[');
for (Node n = head.next; n != head; n = n.next) {
if (n != head.next)
result.append(',');
result.append(n.val);
}
result.append(']');
return result.toString();
} // test it...
public static void main(String[] args) {
MyLinkedList mll = new MyLinkedList();
mll.add("hello");
mll.add(new Integer(100));
mll.add(0, new Double(3.14159));
mll.add(4, new Integer(200)); // will not work
mll.remove(0);
mll.remove(2); // will not work
System.out.println(mll);
System.out.println("total " + mll.getSize() + " elements.");
}
}
的API你可能遍的出来,可是复杂的就不行了,夸平台性,就不好整啊,还有就是对内存的操作,如果
谁有更好的建议,请大家一起探讨探讨
private Node head;
private int size;
private class Node {
Object val;
Node prev, next;
Node(Object o) {
val = o;
}
}
public MyLinkedList() {
head = new Node(null);
head.prev = head.next = head;
}
public boolean add(int index, Object o) {
Node currentNode;
if ((currentNode = nodeAt(index)) == null) return false;
Node newNode = new Node(o);
currentNode.prev.next = newNode;
newNode.prev = currentNode.prev;
newNode.next = currentNode;
currentNode.prev = newNode;
size++;
return true;
}
public boolean add(Object o) {
return add(size, o);
}
public boolean remove(int index) {
Node currentNode = nodeAt(index);
if (currentNode == null || currentNode == head) return false;
currentNode.prev.next = currentNode.next;
currentNode.next.prev = currentNode.prev;
currentNode = null;
size--;
return true;
}
private Node nodeAt(int index) {
if (index > size || index < 0) return null;
Node n = head.next;
for (int i = 0; i < index; i++, n = n.next);
return n;
}
public int getSize() {
return size;
}
public String toString() {
StringBuffer result = new StringBuffer();
result.append('[');
for (Node n = head.next; n != head; n = n.next) {
if (n != head.next)
result.append(',');
result.append(n.val);
}
result.append(']');
return result.toString();
} // test it...
public static void main(String[] args) {
MyLinkedList mll = new MyLinkedList();
mll.add("hello");
mll.add(new Integer(100));
mll.add(0, new Double(3.14159));
mll.add(4, new Integer(200)); // will not work
mll.remove(0);
mll.remove(2); // will not work
System.out.println(mll);
System.out.println("total " + mll.getSize() + " elements.");
}
}
可能我们做的项目不少,还有就是走了不少弯路
怎么能改正这个问题啊,大虾们??????????????????????????