设置排序和删除特定值
问题描述:
我正在寻找这个问题几个小时。
我有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。它的工作就是这样。
答
设置未排序。 Set的定义是跟踪一组项目,并且可以快速测试项目是否在其中(通常在O(log n)或O(1)时间)。没有订单的承诺,实际上一个集合通常在内部使用平衡二叉树或散列,故意失去速度的顺序。
对于你想要的,一个Set不是合适的数据结构。你想要一个队列。队列是一组有序的项目,您可以将它们添加到一侧并从另一侧删除。特别是它似乎你想要一个固定大小的队列。我建议你使用一个,而不是试图制作一个不合适的数据结构。