将ArrayList转换为HashSet

时间:2015-03-04 15:04:32

标签: android arraylist

将arraylist转换为hashSet时遇到了困难。我不知道HashSet为什么我使用ArrayList。我已经读了一些关于它的但没有理解。我在这里试图帮助解决我的问题。

我想要的只是不重复在我的应用程序的ListView中输入的单词。这是我的代码。请忍受它。我在这里也看到了一些问题,但它让我更加困惑。请你好。

P.S. 我的第一次尝试:)



ArrayAdapter<String> adapter;
//onCreate
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>());
		wordList.setAdapter(adapter);

//SEARCH
public void viewWord(View view) {
        s1 = search.getText().toString();
        s2 = dbHelper.getData(s1);

        if (optionTxtView == 0) {
          tv2.setText(s2);
            optionTxtView = 1;

        } else {
            if (optionTxtView == 1) {
                tv3.setText(s2);
                optionTxtView = 1;
            }
        }

        adapter.add(text.getText().toString());
        adapter.notifyDataSetChanged();
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

ListView根据位置返回数据。 Sets没有位置的概念;你必须遍历Set才能找到你想要的元素。

另一方面,Lists确实有一个位置概念,这就是为什么它们与ListViewBaseAdapter类很好地配合。

答案 1 :(得分:0)

将ArrayList元素添加到HashSet(注意:如果元素的顺序很重要,请使用LinkedHashSet):

    ArrayList<String> list = new ArrayList<String>();
    HashSet<String> set = new HashSet<String>();
    list.add("Hello");
    list.add("Hello");
    list.add("World!");

    System.out.println(list); // [Hello, Hello, World!]

    set.addAll(list);

    System.out.println(set); // [Hello, World!]

使用您的代码,也许您可​​以尝试类似:

ArrayAdapter<String> adapter;
//onCreate
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>());

    HashSet<String> noDupesSet = new HashSet<String>();
    noDupesSet.addAll(wordlist);
    wordlist.clear();
    wordlist.addAll(noDupesSet);
    wordList.setAdapter(adapter);

//SEARCH
public void viewWord(View view) {
    s1 = search.getText().toString();
    s2 = dbHelper.getData(s1);

    if (optionTxtView == 0) {
      tv2.setText(s2);
        optionTxtView = 1;

    } else {
        if (optionTxtView == 1) {
            tv3.setText(s2);
            optionTxtView = 1;
        }
    }

    adapter.add(text.getText().toString());
    adapter.notifyDataSetChanged();