【发布时间】:2013-03-05 02:15:54
【问题描述】:
我想按名字对字符串的ArrayList 进行排序,每个“桶”存储以相同字母开头的单词。
这是我目前所拥有的。
public static ArrayList<ArrayList> bucketMaker(ArrayList<String> list) {
ArrayList<ArrayList> output = new ArrayList<ArrayList>(26);
ArrayList<String> bucket = new ArrayList<String>();
for (String s : list) {
for (char letter = 'a'; letter <= 'z'; letter++) {
if (s.startsWith(String.valueOf(letter))) {
bucket.add(s);
output.add(bucket);
bucket.clear();
}
}
}
return output;
}
我遇到的问题是区分存储桶,如果我有bucket.clear();,它只会清除整个列表。我将如何使单词保留在存储桶中,我知道ArrayList 存储对对象的引用,我不知道如何使其保留在列表中而不生成 26 个ArrayList。如果我遗漏了bucket.clear();,那么我在每个“桶”中都有相同的对象。
编辑
我现在有
public static ArrayList<ArrayList> bucketMaker(ArrayList<String> list) {
ArrayList<ArrayList> output = new ArrayList<ArrayList>(26);
ArrayList<String> bucket = new ArrayList<String>();
for (char letter = 'a'; letter <= 'z'; letter++) {
output.add(new ArrayList<String>());
}
for (String s : list) {
for (char letter = 'a'; letter <= 'z'; letter++) {
if (s.startsWith(String.valueOf(letter))) {
output.get(letter-97).add(s);
}
}
}
return output;
}
哪个好用,谢谢你的帮助!
【问题讨论】:
-
您需要 26 个存储桶,但您有一个。你一直在冲洗。 :(