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