LinkedHashSet不是主要插入顺序吗?

问题描述 投票:1回答:1

我目前正在构建一个Android应用,在其中显示名人的名言。我有一个主屏幕和另外2个屏幕,其中我显示所有报价,而另一个屏幕中显示我喜欢的报价。

因此,当我在AllQuotesActivity屏幕上单击“赞”按钮时,报价和作者将保存在LinkedHashSet中,该链接将保存在SharedPreferences中,因此我的FavouriteQuotes活动可以获取数据。我可以获取数据,但是数据是混合的,即使其他链接说LinkedHashSet保持插入顺序。也许我做错了。以下是重要的代码段:

AllQuotesActivity.java:

SharedPreferences sharedPref;
Set<String> set = new LinkedHashSet();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.all_quotes);

    Resources res = getResources();
    Context context = getApplicationContext();
    this.sharedPref = context.getSharedPreferences(
            "MyPref", Context.MODE_PRIVATE);
    final String[] quotesAndAuthors = res.getStringArray(R.array.quotes);

    button3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            set.add(quotesAndAuthors[counter]);
            set.add(quotesAndAuthors[counter + 1]);
        }
    });

}

@Override
public void onPause() {
    super.onPause();
    Log.d("RichQuotes", "Its paused mkay");

    Editor editor = sharedPref.edit();

    editor.putStringSet("quotesAndAuthors", this.set);
    editor.commit();
}

}

FavouriteQuotesActivity.java:

SharedPreferences sharedPref;
Set<String> set = new LinkedHashSet();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.favourite_quotes);

    Resources res = getResources();
    Context context = getApplicationContext();
    this.sharedPref = context.getSharedPreferences(
            "MyPref", Context.MODE_PRIVATE);

    set = sharedPref.getStringSet("quotesAndAuthors", null);

    for (Iterator<String> it = set.iterator(); it.hasNext(); ) {
        String s = it.next();
        Log.v("test", s);
    }

我删除了不必要的代码。

在FavouriteQuotesActivity.java中,我正在记录该集合以检查其值。屏幕上的日志输出和输出是相同的,都以相同的方式未排序。

java android sharedpreferences hashset linkedhashset
1个回答
0
投票

Set set = new LinkedHashSet();

在这一行中,您实例化了一个新的空LinkedHashSet对象。然后将该对象分配给名为set的变量。]​​>

set = sharedPref.getStringSet(“ quotesAndAuthors”,null);

在此行中,您重新分配了set变量以指向其他对象,即通过调用Set返回的某些getStringSet对象。我们不知道实现Set接口的第二个对象的具体类。您可以致电getClass进行询问。

您的第一组,空的LinkedHashSet,未使用。没有其他参考指向它,该集合成为最终垃圾收集的候选者。

© www.soinside.com 2019 - 2024. All rights reserved.