Eld*_*yrm 6 java string for-loop arraylist
所以,简而言之,我有一个Java作业分配,需要以各种方式操作字符串的长ArrayList(我们正在做的事情,如显示单词的组合,添加和从ArrayList中删除,没有什么特别的).我注意到一些提供的ArrayLists有重复的条目(这个分配不需要重复项),所以我从老师那里得到了通过删除重复条目来清理数据的好处.这是我想出的:
private static ArrayList<String> KillDups(ArrayList<String> ListOfStrings) {
for (int i = 0 ; i < ListOfStrings.size(); i++) {
for (int j = i + 1; j < ListOfStrings.size(); j++) {
//don't start on the same word or you'll eliminate it.
if ( ListOfStrings.get(i).toString().equalsIgnoreCase( ListOfStrings.get(j).toString() ) ) {
ListOfStrings.remove(j);//if they are the same, DITCH ONE.
j = j -1; //removing the word basically changes the index, so swing down one.
}
}
}
return ListOfStrings;
}
Run Code Online (Sandbox Code Playgroud)
这对我的任务很好,但我怀疑它在现实世界中会非常有用.有没有办法在比较期间忽略空格和特殊字符?是否有更清洁的方法来处理这个问题(可能没有嵌套的For循环)?还有其他问题我应该问我不知道要问吗?
Boh*_*ian 19
是.它可以在1(优雅)线上完成:
List<String> noDups = new ArrayList<String>(new LinkedHashSet<String>(list));
Run Code Online (Sandbox Code Playgroud)
中间体Set
确保没有重复.选择的LinkedHashSet
实现Set
是为了保持列表的顺序.
另外,在样式说明上:
List
)而不是具体(即ArrayList
)那么你的整个方法是:
private static List<String> killDups(List<String> list) {
return new ArrayList<String>(new LinkedHashSet<String>(list));
}
Run Code Online (Sandbox Code Playgroud)
对于额外的布朗尼点,使该方法通用,因此它适用于任何类型的List
:
private static <T> List<T> killDups(List<T> list) {
return new ArrayList<T>(new LinkedHashSet<T>(list));
}
Run Code Online (Sandbox Code Playgroud)
如果你想忽略某些字符,我会为它创建一个类,并列出这些字符.无论是hashCode()
和equals()
方法经依赖HashSets
于删除的DUP:
public class MungedString {
// simplified code
String s;
public boolean equals(Object o) {
// implement how you want to compare them here
}
public int hashCode() {
// keep this consistent with equals()
}
}
Run Code Online (Sandbox Code Playgroud)
然后
List<MungedString> list;
List<MungedString> noDupList = killDups(list);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6872 次 |
最近记录: |