Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较数字字符串-先转换还是不转换就比较?_Java_List - Fatal编程技术网

Java 比较数字字符串-先转换还是不转换就比较?

Java 比较数字字符串-先转换还是不转换就比较?,java,list,Java,List,我有一个数字列表L1作为字符串(例如“2443”)。我还有另一个类似的清单。我必须将L1中的每个数字与L2中的每个数字进行比较。L1大约有20000个数字(许多是重复的)。L2大约有600个数字,都是唯一的 我无法以任何其他格式获取L1和L2 我想知道最好的比较方法是什么- 将所有数字转换为Long by Long.parseLong(),然后进行比较 作为字符串进行比较 哪个效率更高?我怀疑这可能是几乎相同的,因为在1中,我们必须解析字符串。那是开销 编辑- 我举了一个例子。L1是观看《泰坦尼

我有一个数字列表L1作为字符串(例如“2443”)。我还有另一个类似的清单。我必须将L1中的每个数字与L2中的每个数字进行比较。L1大约有20000个数字(许多是重复的)。L2大约有600个数字,都是唯一的

我无法以任何其他格式获取L1和L2

我想知道最好的比较方法是什么-

  • 将所有数字转换为Long by Long.parseLong(),然后进行比较
  • 作为字符串进行比较
  • 哪个效率更高?我怀疑这可能是几乎相同的,因为在1中,我们必须解析字符串。那是开销

    编辑-

    我举了一个例子。L1是观看《泰坦尼克号》(罗曼史)的Netflix客户ID列表。L2是观看《史莱克》(动画)的客户ID列表。如果至少70%的L1还看了《史莱克》,那么向他们推荐动画电影。另外,注意喜欢浪漫电影的人可能也喜欢动画片。举个愚蠢的例子,但我认为可能有道理


    计数L1中的元素数,称为计数。然后,我们检查L2中是否存在L1元素。如果为true,则将“发现”增加1。计算发现/计数。如果>70%,向浪漫恋人推荐动画电影。

    字符串比较按字典顺序进行比较:。这意味着,根据
    String.compareTo
    设置的顺序,“1000”<“8000”<“900”


    因此,如果您想要正确的数字顺序,最好将其转换为整数。您可以使用
    Integer.parseInt(str)

    此处缺少一些信息-您是否需要将这些信息转换为数字?你只是在比较平等吗?如果唯一的一点是相等比较,并且实际上没有得到足够长的数字,那么最好不要转换为数字:

    在没有数字转换的情况下,在最坏的情况下,您将读取每个字符串L1*L2次。但是在一般情况下,这些比较中的很多都是快速进行的,因为字符串的大小不同,而不仅仅是最后一个数字

    转换为数字时,您必须读取每个字符串(L1*L2次),然后在上面添加int比较

    如果不能保证输入字符串是干净的(您可以得到
    “2”
    “2”

    运行一个快速、有趣的练习,生成两个以数字为字符串的随机列表,结果表明字符串比较速度要快得多(以毫秒为单位的数字,点击数是相等数字的数量):


    这将继续在多个运行中进行重新编程。

    为什么不进行编码和检查

    TestCode

    案例1

    结果
    0.15
    2秒

    注意


    在最坏情况下测试(20000*600回路)。在最佳实现中,您将需要600*log(20000)个循环。

    从示例中可以推断,您正在比较字符串而不是数字(ID可能是一个数字,但由于您不会使用它进行计算,因此将其视为字符串是有意义的)


    因此,我认为应该使用字符串比较来比较等式,而不是首先将其转换为数字。此解决方案更有效。

    比较并做什么?@TheNewIdiot-我不确定比较背后的目的在这种情况下是否相关。我想把这看作一项任务。这取决于:你是想让它们按数字顺序排列,还是按字母顺序排列?不过,你的两个案例的行为并不总是一样的。如果元素的位数不同怎么办?@ZongLi:那么你是说所有数字的位数都完全相同?这是唯一一种结果总是相同的情况。现在,只有平等才重要。我不认为我需要将它转换为long以便以后使用。我模拟了它,发现如果只需要相等,字符串比较确实要快得多。我只是使用了它。。但您可以使用计时器检入自己的ide
    Compare Strings: 249.0363 (hits: 600)
    Compare with Convert: 2505.3822 (hits: 600) 
    
    class Main
    {
      public static void main (String[] args) throws java.lang.Exception
      {
         String a = "1235";
         String b = "1235";
    
         for(int i = 0; i< 20000*600; i++){
             if(a.equals(b));
         }
      }
    }
    
    class Main
    {
      public static void main (String[] args) throws java.lang.Exception
      {
         String a = "1235";
         String b = "1235";
    
         for(int i = 0; i< 20000*600; i++){
             if(Long.parseLong(a) == Long.parseLong(b));
         }
      }
    }