Java 如何使用两种方法从数组列表中删除重复项?
第一种方法查找重复项,第二种方法将其删除。 我尝试了以下代码,但它不起作用。我不明白为什么。需要使用两种方法来完成。当我调用这些方法时,它们不会删除重复项。arraylist保持不变。我想用两种方法删除重复项Java 如何使用两种方法从数组列表中删除重复项?,java,Java,第一种方法查找重复项,第二种方法将其删除。 我尝试了以下代码,但它不起作用。我不明白为什么。需要使用两种方法来完成。当我调用这些方法时,它们不会删除重复项。arraylist保持不变。我想用两种方法删除重复项 public static int find(ArrayList<String> s, int i) { for (int j = i + 1; j < s.size(); j = j + 1) { if (s.get(i) == s.get(j
public static int find(ArrayList<String> s, int i) {
for (int j = i + 1; j < s.size(); j = j + 1) {
if (s.get(i) == s.get(j)) {
return j;
}
}
return -1;
}
public static void removeDuplicates(ArrayList<String> s) {
for (int i = 0; i < s.size(); i = i + 1) {
int foundAt = (find(s, i));
if (foundAt >= 0) {
s.remove(i);
}
}
}
publicstaticintfind(arraylists,inti){
对于(int j=i+1;j=0){
s、 删除(i);
}
}
}
别担心:
public static List<String> removeDups(final List<String> orig)
{
return new ArrayList<>(new LinkedHashSet<>(orig));
}
publicstaticlist-removeDups(最终列表源)
{
返回新的ArrayList(新的LinkedHashSet(orig));
}
(注意使用
LinkedHashSet
,我们希望保留元素迭代顺序)为什么不直接将其转储到集合中
List<String> listduplicates = new ArrayList<String>(10);
//add elements to the list
Set<String> as = new HashSet<String>(listduplicates );
List<String> listunique = new ArrayList<String>(as.size());
List listdeplicates=newarraylist(10);
//向列表中添加元素
Set as=新的HashSet(listdeplicates);
List listunique=新的ArrayList(as.size());
listunique现在提供unique元素如果您想使用两种方法,并且遵循您的相同想法,您可以将您的方法修改为:
public static int find(List<String> s, int j) {
for(int i=j;i<s.size();i++) {
if (s.lastIndexOf(s.get(i)) != i) {
return i;
}
}
return -1;
}
public static void removeDuplicates(ArrayList<String> s) {
for (int j=0; j<s.size();j++) {
int i = -1;
while((i=find(s,j))>=0) {
s.remove(i);
}
}
}
publicstaticint-find(列表s,int-j){
对于(int i=j;i如果您使用的是Java 8,则可以使用流API和distinct()
操作来消除重复项:
List<Integer> list = Arrays.asList(5, 3, 6, 5, 4, 6);
List<Integer> filtered = list.stream().distinct().collect(Collectors.toList());
System.out.println("filtered: " + filtered); // [5, 3, 6, 4]
List List=Arrays.asList(5,3,6,5,4,6);
List filtered=List.stream().distinct().collect(Collectors.toList());
System.out.println(“过滤:+过滤);//[5,3,6,4]
我已检查了您的代码,它运行正常,并从列表中删除了重复项。您可以更改RemovedUpplicates方法以删除列表中稍后出现的重复项
public static void removeDuplicates(ArrayList<String> s) {
for (int i = 0; i < s.size(); i = i + 1) {
int foundAt = (find(s, i));
if (foundAt >= 0) {
s.remove(foundAt);
}
}
}
移除的公共静态无效副本(ArrayList s){
对于(int i=0;i=0){
s、 移除(foundAt);
}
}
}
不使用Set
的任何原因?代替s.get(i)==s.get(j)
使用s.get(i).equals(s.get(j))