我想从数组列表中删除一个字符串,其第一个字符与另一个字符串相同。
示例
List<String> collection = new ArrayList<String>();
collection.add("1 w a");
collection.add("2 r a");
collection.add("1 r b");
collection.add("2 r b");
collection.add("3 w a");
输出
collection = ["1 w a", "2 r a", "3 w a"]
我尝试使用hashset
和linkedhashset
。
答案 0 :(得分:1)
ind 列表包含要删除的索引。
但上面评论的人是正确的,计算上,即 通过算法查看,您应该使用更好的数据结构 这里,而不是ArrayList。
import java.util.ArrayList;
import java.util.List;
public class Test005 {
public static void main(String[] args) {
List<String> collection = new ArrayList<String>();
collection.add("1 w a");
collection.add("2 r a");
collection.add("1 r b");
collection.add("2 r b");
collection.add("3 w a");
List<Integer> ind = new ArrayList<Integer>();
for (int i=0; i<collection.size(); i++){
for (int j=0; j<i; j++){
if (collection.get(j).charAt(0) == collection.get(i).charAt(0)){
ind.add(i);
break;
}
}
}
for (int k=0; k<ind.size(); k++){
collection.remove(ind.get(k).intValue());
}
for (int i=0; i<collection.size(); i++){
System.out.println(collection.get(i));
}
}
}
答案 1 :(得分:1)
基本上你想要做的就是浏览列表,对于每个元素,浏览列表的其余部分并删除任何具有相同startign字符的内容。
示例实施:
List<String> deleteList = new ArrayList<String>();
for(int i = 0;i < collection.size();i ++){
//If this is flagged for deletion continue
if(deleteList.contains(collections.get(i)))continue;
for(int j = i + 1;j < collection.size();j ++){
//If this is flagged for deletion continue
if(deleteList.contains(collections.get(j)))continue;
//If the chars are the same, add it to the list to be deleted
if(collection.get(i).charAt(0) == collection.get(j).charAt(0)){
deleteList.add(collection.get(j));
}
}
}
collection.removeAll(deleteList);
答案 2 :(得分:1)
使用最少character
的存储空间,您可以执行查找和删除重复操作:
List<Character> dups = new ArrayList<Character>();
Iterator<String> itr = collection.iterator();
while(itr.hasNext()) {
String s = itr.next();
char c = s.charAt(0);
if(dups.contains(c)) {
itr.remove();
continue;
}
dups.add(c);
}
System.out.println(collection);
<强>输出:强>
[1 w a,2 r a,3 w a]
答案 3 :(得分:1)
使用仅TreeSet
的{{1}}仅查看第一个字符。将所有元素插入集合中。
Comparator
答案 4 :(得分:0)
List<String> collection = new ArrayList<String>();
collection.add("1 w a");
collection.add("2 r a");
collection.add("1 r b");
collection.add("2 r b");
collection.add("3 w a");
Set set = new HashSet();
for(int i=0;i<collection.size();++i){
String temp = collection.get(i);
if(set.contains(temp.charAt(0))){
collection.remove(temp);
i--;
} else{
set.add(temp.charAt(0));
}
}
for(int i=0;i<collection.size();++i){
System.out.println(collection.get(i));
}
输出:
1 w a
2 r a
3 w a
答案 5 :(得分:0)
遍历给定List的每个元素,在临时集的帮助下,我们检查第一个元素是否在集合中。如果不是那么我们将其添加到最终列表中。如果已包含该内容,则跳过它。
import java.util.*;
public class Test {
public static void main(String[] args) {
List<String> collection = new ArrayList<String>();
collection.add("1 w a");
collection.add("2 r a");
collection.add("1 r b");
collection.add("2 r b");
collection.add("3 w a");
System.out.println(removeDuplicates(collection));
}
private static List<String> removeDuplicates(List<String> collection) {
HashSet<String> withoutDuplicates = new HashSet<String>();
List<String> collection2 = new ArrayList<String>();
for(String s : collection){
String[] temp = s.split(" ");
if(!withoutDuplicates.contains(temp[0])){
withoutDuplicates.add(temp[0]);
collection2.add(s);
}
}
return collection2;
}
}