2017-10-21 6 views
0

この問題を何時間も探しています。
私はdropdownlistのすべての入力を示すautocompletetextviewを持っています。
私はSharedpreferenceに値を保持します。セット<String>特定の値を並べ替えて削除する

AutoCompleteTextView texttutar; 
ArrayAdapter<String> adapter; 
SharedPreferences.Editor editor; 
SharedPreferences pref; 
Set<String> hs; 

ONCREATE ---- 

    pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    editor = pref.edit(); 
    hs = pref.getStringSet("set", new HashSet<String>()); 
    adapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line); 

    texttutar.setAdapter(adapter); 

if(!texttutar.getText().toString().isEmpty()){ 
    hs.add(texttutar.getText().toString()); 
    editor.clear(); 
    editor.putStringSet("set",hs); 
    editor.commit(); 
         } 
    // SortedSet<String> sortedSet = new TreeSet<String>(hs); 
    // Toast.makeText(getApplicationContext(), "" + sortedSet.first(), Toast.LENGTH_LONG).show(); 

// if(hs.size()>=5) 
// hs.remove(hs.iterator().next()); Removing last value of hs 

         adapter.clear(); 
         adapter.addAll(hs); 



    texttutar.setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View v, MotionEvent event) { 

         adapter.getFilter().filter(null); 
         texttutar.setThreshold(1); 

        } 
        return false; 
       } 
      }); 
     texttutar.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       texttutar.showDropDown(); 
      } 
     }); 

ここで、このコードは完全に機能します。 しかし、もう2つのことが必要です。

最初の問題:100 - - 105 - 103

102:私は

100のような値を追加すると101 - - 102 - - 103 -104 105

それは私にそのような値を示します - 101 - 104

なぜか分かりません。それは時間でソートする必要があります。

第2の問題:最後の値は削除できますが、最初のアイテムの解決策は見つけられませんでした。

私はTreesetのようなものを試しましたが、それは重要ではありません。重要なのは、Set(Sharedpreference)の値を削除することです。

自動テキストビューに5の値が表示された後は、最初の項目を削除する必要があります。

このように:この値を追加します。 110-200-300-400-690、次に900

900を追加すると、最初の値(110)が削除され、最初の値は200になります。そのような仕事。

答えて

0

セットはソートされていません。セットの定義は、アイテムのグループを追跡し、アイテムがその中にあるかどうか(通常はO(log n)またはO(1)の時間内にあるかどうか)を迅速にテストできることです。順序の約束はなく、実際には、通常、バランスのとれたバイナリツリーやハッシュを内部的に使用し、意図的に速度の順序を失います。

あなたが望むところでは、Setは適切なデータ構造ではありません。キューが必要です。キューは、アイテムの片側に追加して別の側から削除する順序付けされたアイテムのグループです。特に、固定サイズのキューが必要なようです。不適切な作業であるデータ構造を作るのではなく、1つを使うことをお勧めします。

関連する問題