2017-10-21 173 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不是合适的数据结构。你想要一个队列。队列是一组有序的项目,您可以将它们添加到一侧并从另一侧删除。特别是它似乎你想要一个固定大小的队列。我建议你使用一个,而不是试图制作一个不合适的数据结构。