次の問題があります。エントリと呼ばれるオブジェクトを含むリンクリストまたは位置リストがあります。各エントリには、キーと値のペアが格納されます。私はそのリストからキーだけをつかむ別のリンクされたリストを作成したい。私はそうする方法を思いついたのですが、何らかの理由でそれらを追加した順序は、私がキーリストを印刷するときには表されません。 printKeySetは、キーセット(の結果をとり)全体キーリストを出力しながらのkeySet()メソッドは、キーのみを含むリストを返す他のリンクリストからキーを含むリンクリストを返す
public PositionalList1<K> keySet() //I prnted position by position while adding and it worked. I also tested addAfter with positionalList1 class and it worked
{
PositionInterface<Entry> iterator = map.first(); //gets first position in the Entry List
PositionInterface<K> first = keyList.addFirst((K)iterator.getData().getKey()); //adds to list containing just keys the key from the Entry list(getData is just a method that returns whatever object is stored at the node, in this case a Entry Object)
iterator = map.after(iterator); //go to next node in Entry list
for(int i=0;i<size-1;i++) //get rest of keys
{
PositionInterface<K> p = keyList.addAfter(first,(K)iterator.getData().getKey());
iterator = map.after(iterator);
}
return keyList;
}
public void printKeySet(PositionalList1 list) //print key list
{
PositionInterface p = list.first();
for(int i=0; i<list.size();i++)
{
System.out.println("Key : " + p.getData());
p = list.after(p);
}
}
:私は、次の2つの方法を持っています。これは、などの順序付きリスト(1、C)(2、A)...の結果
OrderedMapL<Integer,String> map2 = new OrderedMapL<Integer,String>();
map2.put(2,"A");//adds (2,A)
map2.put(5,"B");//adds(5,B)
map2.put(1,"C");//adds(1,C)
map2.put(4,"D");//adds(4,D)
map2.put(3,"E");//adds(3,E)
map2.remove(2); //removes (2,A)
とエントリー自体がこの順に細かい印刷:私は、主に以下のプログラムを使用して、これをテストしています。以下を呼び出すときに、問題が発生:
PositionalList1<Integer> keyList = map2.keySet();
map2.printKeySet(keyList);
キーが順番に印刷されているいくつかの理由:1,5,4,3の代わりに、1,3,4,5-と私は理由は分かりません。どんな助けもありがとう。
あなたが独自のカスタムクラスのような外観を使用しているすべてのクラス:私が正しくあなたのコードを理解していれば
あなたはこのようにそれを変更する必要があります。彼らが何をし、どのように働くのか分かりません。なぜ標準Javaコレクションを使用しないのですか? –
これは、私自身の抽象データ型を記述することが期待されるデータ構造体クラスです。ノードリスト自体に関連するすべての補助機能が動作し、テストされています。 addAfter()は、パラメータ化された位置の後に位置を追加するだけです。これは、keySet()で位置1を1つずつ印刷したときの位置が正しく追加されたときと同じです。 printKeySet()では、この順序は表されません。 – JmanxC
また、after()もparamateziedの後の位置を返す別のnodelist関数です。関数の名前は、それが何をしているかをほとんど知らせます。 – JmanxC