2017-10-21 93 views
0

我正在尋找這個問題幾個小時。
我有autocompletetextview這是顯示在dropdownlist中的所有輸入。
我將值保存在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(); 
      } 
     }); 

現在,此代碼完美工作。 但我還需要做兩件事。

第一個問題:當我添加像

100值 - 101 - 102 - 103 -104 - 105

其表示我這樣的值:

102 - 100 - 105 - 103 - 101 - 104

我不知道爲什麼。它必須按時間排序。

第二個問題:正如你可以看到我可以刪除最後一個值,但我沒有找到任何解決方案的第一個項目。

我嘗試了類似Treeset的東西,但它並不重要。重要的是我應該刪除Set(Sharedpreference)的值。

autotextview顯示5個值後,必須刪除第一個項目。

就像那樣:我在添加這個值。 110-200-300-400-690然後900

當我加900代碼必須刪除第一個值(110),那麼第一個值將是200。它的工作就是這樣。

回答

0

設置未排序。 Set的定義是跟蹤一組項目,並且可以快速測試項目是否在其中(通常在O(log n)或O(1)時間)。沒有訂單的承諾,實際上一個集合通常在內部使用平衡二叉樹或散列,故意失去速度的順序。

對於你想要的,一個Set不是合適的數據結構。你想要一個隊列。隊列是一組有序的項目,您可以將它們添加到一側並從另一側刪除。特別是它似乎你想要一個固定大小的隊列。我建議你使用一個,而不是試圖製作一個不合適的數據結構。