相关疑难解决方法(0)

为什么我需要覆盖Java中的equals和hashCode方法?

最近我读了这个 Developer Works文档.

该文档是关于定义hashCode()equals()有效和正确的,但我无法弄清楚为什么我们需要覆盖这两种方法.

如何有效地实施这些方法?

java equals hashcode

355
推荐指数
15
解决办法
39万
查看次数

如何在不使用Set的情况下有效地从数组中删除重复项

我被要求编写自己的实现来删除数组中的重复值.这就是我创造的.但经过1,000,000个元素的测试后,需要很长时间才能完成.我可以做些什么来改进我的算法或删除任何错误?

我需要写我自己的实现-不使用Set,HashSet等等.或者任何其他工具,如迭代器.只需一个数组即可删除重复项.

public static int[] removeDuplicates(int[] arr) {

    int end = arr.length;

    for (int i = 0; i < end; i++) {
        for (int j = i + 1; j < end; j++) {
            if (arr[i] == arr[j]) {                  
                int shiftLeft = j;
                for (int k = j+1; k < end; k++, shiftLeft++) {
                    arr[shiftLeft] = arr[k];
                }
                end--;
                j--;
            }
        }
    }

    int[] whitelist = new int[end];
    for(int i = 0; i < end; …
Run Code Online (Sandbox Code Playgroud)

java arrays optimization

39
推荐指数
9
解决办法
34万
查看次数

如何从Android中的arraylist中删除重复值

ArrayList<String> values=new ArrayList<String>();
values.add("s");
values.add("n");
values.add("a");
values.add("s");
Run Code Online (Sandbox Code Playgroud)

在这个数组中,我想删除重复的值.

java android arraylist

32
推荐指数
4
解决办法
5万
查看次数

从ArrayList中删除重复值

我有一个字符串的Arraylist,我在其中添加了一些重复值.我只是想删除重复值,所以如何删除它.

这里的例子我有一个想法.

List<String> list = new ArrayList<String>();
        list.add("Krishna");
        list.add("Krishna");
        list.add("Kishan");
        list.add("Krishn");
        list.add("Aryan");
        list.add("Harm");

        System.out.println("List"+list);

        for (int i = 1; i < list.size(); i++) {
            String a1 = list.get(i);
            String a2 = list.get(i-1);
            if (a1.equals(a2)) {
                list.remove(a1);
            }
        }

        System.out.println("List after short"+list);
Run Code Online (Sandbox Code Playgroud)

但是有没有足够的方法删除重复的表单列表.没有使用For循环?你可以通过使用HashSet或其他方式,但只使用数组列表.我想对此有你的建议.谢谢你提前回答.

java sorting list arraylist

19
推荐指数
5
解决办法
16万
查看次数

Java - 删除ArrayList中的重复项

我正在研究一个使用ArrayList存储的程序Strings.程序通过菜单提示用户,并允许用户选择要执行的操作.这样的操作是将字符串添加到列表,打印条目等.我想要做的是创建一个名为的方法removeDuplicates().此方法将搜索ArrayList并删除任何重复的值.我想在列表中留下一个重复值的实例.我还希望此方法返回已删除的重复项的总数.

我一直在尝试使用嵌套循环来实现这一点,但是我遇到了麻烦,因为当条目被删除时,变量的索引ArrayList会被改变,并且事情不能正常工作.我从概念上知道我需要做什么但是我在代码中实现这个想法时遇到了麻烦.

这是一些伪代码:

从第一次入门开始; 检查列表中的每个后续条目,看它是否与第一个条目匹配; 删除列表中与第一个条目匹配的每个后续条目;

在检查完所有条目后,转到第二个条目; 检查列表中的每个条目,看它是否与第二个条目匹配; 删除列表中与第二个条目匹配的每个条目;

重复列表中的条目

这是我到目前为止的代码:

public int removeDuplicates()
{
  int duplicates = 0;

  for ( int i = 0; i < strings.size(); i++ )
  {
     for ( int j = 0; j < strings.size(); j++ )
     {
        if ( i == j )
        {
          // i & j refer to same entry so do nothing
        }

        else if ( strings.get( j ).equals( strings.get( i …
Run Code Online (Sandbox Code Playgroud)

java algorithm arraylist

18
推荐指数
4
解决办法
9万
查看次数

并行流是否可以正常运行?

我正在阅读有关无国籍状态的文章并在文档中遇到过这个问题:

如果流操作的行为参数是有状态的,则流管道结果可能是不确定的或不正确的.有状态lambda(或实现适当功能接口的其他对象)的结果取决于在流管道执行期间可能发生变化的任何状态.

现在,如果我有一个字符串列表(strList比如说),然后尝试使用并行流从中删除重复的字符串,方法如下:

List<String> resultOne = strList.parallelStream().distinct().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

或者如果我们想要不区分大小写:

List<String> result2 = strList.parallelStream().map(String::toLowerCase)
                       .distinct().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

此代码是否有任何问题,因为并行流将分割输入并且在一个块中不同并不一定意味着在整个输入中是不同的?

编辑(以下答案的快速摘要)

distinct是有状态操作,并且在有状态中间操作的情况下,并行流可能需要多次通过或大量缓冲开销.distinct如果元素的排序不相关,也可以更有效地实现.另外根据文件:

对于有序流,不同元素的选择是稳定的(对于重复元素,保留在遇到顺序中首先出现的元素.)对于无序流,不进行稳定性保证.

但是在有序流并行运行的情况下,不同可能是不稳定的 - 意味着它将在重复的情况下保留任意元素,而不一定是distinct其他情况下预期的第一个元素.

链接:

在内部,distinct()操作保持一个包含先前已经看到的元素的Set,但它隐藏在操作中,我们无法从应用程序代码中获取它.

因此,在并行流的情况下,它可能会消耗整个流,或者可能使用CHM(类似于ConcurrentHashMap.newKeySet()).对于有序的,很可能是使用LinkedHashSet或类似的结构.

java java-8 java-stream

16
推荐指数
1
解决办法
1539
查看次数

如何根据自定义java对象而不是基本类型从列表中删除重复项?

在我发布这个问题之前,我在这里发现了类似的问题.但答案是基于一个字符串.但是,我在这里有不同的情况.我不是要删除String而是另一个名为AwardYearSource的对象.该类有一个名为year的int属性.所以我想删除基于年份的重复项.即如果有不止一次提到的2010年,我想删除该AwardYearSource对象.我怎样才能做到这一点?

java list arraylist set

15
推荐指数
1
解决办法
2万
查看次数

从Android中的ArrayList中删除重复的对象

我知道这已经在这里一遍又一遍地讨论,但我尝试过的所有例子都没有为我工作.

我得到了什么

我从Android访问呼叫日志,我得到了所有呼叫的列表.当然,在这里我得到了很多重复.首先我制作一份清单

List<ContactObject> lstContacts = new ArrayList<ContactObject>();
Run Code Online (Sandbox Code Playgroud)

然后我在其中添加对象

While (get some record in call log)
{
    ContactObject contact = new ContactObject();
    contact.SetAllProperties(......)  
    lstContacts.add(contact);  
}

Set<ContactObject> unique = new LinkedHashSet<ContactObject>(lstContacts);
lstContacts = new ArrayList<ContactObject>(unique);
Run Code Online (Sandbox Code Playgroud)

Contact Object类很简单

public class ContactObject {

    public ContactObject() {
        super();
    }

 @Override
 public boolean equals(Object obj) {
     if (!(obj instanceof ContactObject))
        return false;

     return this.lstPhones == ((ContactObject) obj).getLstPhones(); 
 }

 @Override
 public int hashCode() {
     return lstPhones.hashCode();
 }

    private long Id;
    private String name;
    private List<String> lstPhones; …
Run Code Online (Sandbox Code Playgroud)

java android arraylist hashcode treeset

9
推荐指数
2
解决办法
1万
查看次数

Java删除ArrayList中的重复对象

我有一个非常冗长的ArrayList,其中包含一些对象,但无疑是重复的.找到并删除这些重复项的最佳方法是什么.注意:我编写了一个布尔返回的compareObjects()方法.

java arraylist duplicates

8
推荐指数
2
解决办法
5万
查看次数

Java从数组中删除重复项?

我应该在包含许多不同电子邮件地址的文件中读取并使用数组打印出来.问题是我需要消除重复的电子邮件.

我能够让我的try/catch工作并打印出电子邮件地址.但是,我不知道如何删除重复项.我不了解哈希码或如何使用哈希码Set.任何援助将不胜感激.

这是我到目前为止:

import java.util.Scanner;
import java.io.*;

public class Duplicate {
   public static void main(String[] args) {

      Scanner keyboard = new Scanner(System.in);
      System.out.println("Enter file name: ");
      String fileName = keyboard.nextLine();
      if (fileName.equals("")) {
         System.out.println("Error: User did not specify a file name.");
      } else {
         Scanner inputStream = null;

         try {
            inputStream = new Scanner(new File(fileName));
         } catch (FileNotFoundException e) {
            System.out.println("Error: " + fileName + " does not exist.");
            System.exit(0);
         }

         String[] address = new String[100];

         int i …
Run Code Online (Sandbox Code Playgroud)

java arrays duplicates

7
推荐指数
3
解决办法
4万
查看次数