设置<string>排序并删除特定值

时间:2017-10-21 15:09:25

标签: android sorting sharedpreferences

我几个小时都在寻找这个问题 我有autocompletetextview,它显示了下拉列表中的所有输入 我将值保存在Sharedpreference中。

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。它的工作就是这样。

1 个答案:

答案 0 :(得分:0)

设置未排序。 Set的定义是它跟踪一组项目,并且您可以快速测试项目是否在其中(通常在O(log n)或O(1)时间内)。订单没有承诺,实际上一套通常在内部使用平衡二叉树或哈希,故意失去速度订单。

对于您想要的,Set不是合适的数据结构。你想要一个队列。队列是一组有序的项目,您可以将它们添加到一侧并从另一侧删除。特别是你似乎想要一个固定大小的队列。我建议你使用一个,而不是试图使数据结构不合适。