如何实现java数据结构,特别是链式的结构?
不使用api。
java中的引用类似c++的指针,但又有差别,且完全面向对象,实现起来感觉有点复杂。
请教各位有没有完美的实现方法?

解决方案 »

  1.   

    Java中基本的数据结构都已经实现,所以很少有人讨论这个话题。建议你找一本以Java为基础的讲解Data Structure的书,阅读别人的代码,上手比较快。
      

  2.   

    数据结构这我当然知道
    以前都是用c、c++写的
    我只是想问程序上的技巧
    怎样写出更强壮的java数据结构
      

  3.   

    链表用LinkedList不就行了吗?还不够 强壮?Java本身和Apache common collection中还有很多不同的实现
    不明白你要做什么
      

  4.   

    楼主主要是想问算法吧在JAVA中用引用是可以实现的,把每个节点当作对象
      

  5.   

    5楼终于知道我要做什么了。知音呐!
    我就是想自己写数据结构,而不使用api。
    用c、c++写过。
    而且我觉得用不同的语言写肯定有不同的技巧。
    所以来询问java语言的技巧。
    有例子更好。
      

  6.   

    鉴于你的知识如此的渴求和苛求,我批准你去SUN去开发新的API,让我们用用中国人自己的写的API!
      

  7.   

    反正你在怎么写也不会比sun的开发团队写的强,所以建议你把java.util包中所有集合类的源码全部都看明白就相当可以了。
      

  8.   

    sun公司写的肯定比我好
    不过sun写的太全面了,太复杂了
    我自己写的肯定只是简单的,不考虑复杂的。
    而且我只是想问下你们怎么写的,怎么都回答得不对题?
      

  9.   

    利用对象的观点就可以实现,比如Node.next,Node.prev,Node.get(index)等等
      

  10.   

    java和c的区别这里
    c很多东西只有api,要自己去写实现
    比如链表但是java基本上常用的api功能都有现成的类了,都封装好了
    比如链表的话有LinkedLisk,ArrayList等等
    哈西表有HashMap,HashTable,HashSet等等....你去查下java的doc,基本上都有
      

  11.   

    楼主一定要自己写那就自己写吧,不过,写完再看jdk的源码,你会发觉很没趣。给你我写的一个简单的双链表供参考:public class MyLinkedList {

    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.");
    }

    }
      

  12.   

    在java里面 有些是必须用 SUN公司API的,因为,这些API里可能还包括其他的文件内容,所以,一些简单
    的API你可能遍的出来,可是复杂的就不行了,夸平台性,就不好整啊,还有就是对内存的操作,如果
    谁有更好的建议,请大家一起探讨探讨
      

  13.   

    链表用LinkedListpublic class MyLinkedList {
        
        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.");
        }
        
    }
      

  14.   

    其实有时候想想 ,JAVA也不难,为什么到用的时候就问题百出了呢
    可能我们做的项目不少,还有就是走了不少弯路
    怎么能改正这个问题啊,大虾们??????????????????????????