2

まず、Javaを勉強しているのはここ数週間だけなので、まだあまり経験がありません。

これはもっと理論的な質問です。簡単なリストを作成したい。

そこで、最初にいくつかのメソッドを指定したクラスを作成しました。あらゆるタイプを使用できるように、汎用的にしたいと思います。

  public interface List<E> 

今、私はそれを実装する必要があるので、私は作成しました:

    public class MyList<E> implements List<E>

ここで、2つの属性が必要です。

 private E element;
 private MyList<E> next;

1つは私のジェネリック型を保持し、もう1つは次の要素へのリンクになります。まず第一に、それがそれを書く正しい方法であるかどうかはわかりません。そして、この属性をこのクラス内に残した場合、正しく機能しますか?

次に、これら2つのフィールドを含む別のクラス、たとえばクラスを作成Boxして、実装中の操作を容易にする方がよいかどうかを考えてきました。

ばかげた質問かもしれませんが、私はこれを行うための最良の方法を学び、理解しようとしています。

御時間ありがとうございます。

4

3 に答える 3

9

片方向リストを実装しようとしていると思います。あなたの質問に答えるために、Boxあなたが言及したようなクラスを作成することはあなたにとって有益だと思います(しばしば呼ばれますNode)。したがって、実装は次のようになります。

public class MyList<E> implements List<E> {
    private Node<E> head;

    private static class Node<E> {
        private E element;
        private Node<E> next;

        public Node(E element, Node<E> next) {
            this.element = element;
            this.next = next;
        }

        // ...
    }

    // ...
}

MyListNodeは、他の のチェーンに接続されているシングルを保持しNodeます。見てみると、これが実際のjava.util.LinkedListクラスの書き方です。

于 2012-09-30T21:22:28.487 に答える
2

まず、リストには要素を保持するノードがあります。例えば:

public class Node<E> {
    private E element;
    private Node<E> next;
}

次に、ルート ノードを定義する必要がありますが、これ以降は 2 つの方法で実装できます。

  • ノードに List インターフェイスを実装させるか、Node 要素を継承させて、これにインターフェイスを実装させます
  • インターフェイスを実装し、ルート要素を保持するクラスを作成します (一般的なアプローチ)

通常の方法なので、2番目の方法を説明します。「メインクラス」が必要です。

public class MyList<E> implements List<E> {
    private Node<E> root;
}

このクラスはメソッドを実装し、ルート オブジェクトで動作する必要があります。たとえば、ルート ノードの次のポインタを使用してノードをトラバースします。さらに、通常、追加を高速化するために最後のノードも保存され、現在のサイズも保存されます。したがって、List 実装にはさらに 2 つの変数が必要です。

ただし、Node クラスは非公開の内部クラスにする必要があります。

于 2012-09-30T21:27:17.337 に答える
0

リストだけを使用したい場合は、-packageに標準の実装がありますjava.util。たとえば、 LinkedListArrayListなどです。さまざまな種類のリストとその実装方法について何かを読みたい場合は、ウィキペディアが常に出発点として適しています。

于 2012-09-30T21:20:04.650 に答える