LinkedHashSet 不主插入顺序?
LinkedHashSet does not main insertion order?
我目前正在构建一个 Android 应用程序,我可以在其中显示名人的名言。我有一个主屏幕和其他 2 个屏幕,其中我显示所有报价,另一个屏幕显示我最喜欢的报价。
所以,当我在 AllQuotesActivity 屏幕上点击赞按钮时,引用和作者将保存在 LinkedHashSet 中,后者将保存在 SharedPreferences 中,所以我的 FavouriteQuotes Activity 可以获取数据。我可以获取数据,但是数据是混合的,尽管其他链接说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 中,我正在记录集合以检查其值。日志输出和屏幕上的输出相同,未排序的方式相同。
Set set = new LinkedHashSet();
在这一行中,您实例化了一个新的空 LinkedHashSet
对象。然后将此对象分配给名为 set
.
的变量
set = sharedPref.getStringSet("quotesAndAuthors", null);
在这一行中,您重新分配了 set
变量以指向某个其他对象,某些 Set
对象由您调用 getStringSet
返回。我们不知道实现 Set
接口的第二个对象的具体 class。你可以打电话问getClass
。
您的第一套空 LinkedHashSet
未使用。由于没有其他引用指向它,该集合成为最终垃圾收集的候选者。
我目前正在构建一个 Android 应用程序,我可以在其中显示名人的名言。我有一个主屏幕和其他 2 个屏幕,其中我显示所有报价,另一个屏幕显示我最喜欢的报价。
所以,当我在 AllQuotesActivity 屏幕上点击赞按钮时,引用和作者将保存在 LinkedHashSet 中,后者将保存在 SharedPreferences 中,所以我的 FavouriteQuotes Activity 可以获取数据。我可以获取数据,但是数据是混合的,尽管其他链接说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 中,我正在记录集合以检查其值。日志输出和屏幕上的输出相同,未排序的方式相同。
Set set = new LinkedHashSet();
在这一行中,您实例化了一个新的空 LinkedHashSet
对象。然后将此对象分配给名为 set
.
set = sharedPref.getStringSet("quotesAndAuthors", null);
在这一行中,您重新分配了 set
变量以指向某个其他对象,某些 Set
对象由您调用 getStringSet
返回。我们不知道实现 Set
接口的第二个对象的具体 class。你可以打电话问getClass
。
您的第一套空 LinkedHashSet
未使用。由于没有其他引用指向它,该集合成为最终垃圾收集的候选者。