或者在android中的语句优化

时间:2013-05-06 11:12:29

标签: android if-statement

我有两个列表:list1,list2。我遍历两个列表并将它们组合成一个列表。然后我用这样的陈述:

if(list1 != null && list2 != null)
{
  int i=0,j=0;     
 while(i<list1.size() || j<list2.size())   
{

if((j>=list2.size()) || (curFormater.parse(list1.get(i).RecordDate).compareTo(curFormater.parse(list2.get(j).RecordDate)) < 0))                {
    .....                   
i++;      

    }
    else if((i>=list1.size()) || (curFormater.parse(list1.get(i).RecordDate).compareTo(curFormater.parse(list2.get(j).RecordDate)) < 0))
    {
    .....


j++;

}


....

    }

在这两个if语句中,当j>=list2.size()i>=list1.size()时,不应判断后一个条件,但JAVA编译器似乎都判断它们并抛出IndexOutOfBoundsExceptio n。我怎么能让java不执行后面的条件判断? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果要合并两个具有不同大小的列表,则最小列表的索引将始终比最大列表更早完成迭代,因此您必须使用&&运算符。

if(list1 != null && list2 != null)
{ 
  int i=0,j=0;     
  while(i<list1.size() && j<list2.size())   
  {
      // your code
      i++; 
      j++;
  }
  // when one of them arrived to end of list to loop will not be executed so you need to check
  // those conditions
 while (i > list.size() && j < list.size())
 {
       // your code
       j++;
 }
 while (i < list.size() && j > list.size())
 {
       // your code
      i++;
 }

因此,对于优化,如果假设list1中有m个元素,list2中有n个元素,则时间复杂度将始终为O(m + n),仅执行两个while循环< / p>

修改

ORAND运算符为Binary Operators,这意味着他们必须检查这两个运算符 他们结合的条件,而Not是一元的,其中需要一个条件来检查 如果您听说过这些运算符的真值表,那么编译器就会根据这些真值表进行编程,当他看到|| (或操作员)他用OR的真值表检查条件,当他看到&amp;&amp; (和操作员)他用AND的真值表检查条件。 由于OR和AND都是二元运算符,因此这两个条件都将被“juded” 其中一个是真的。

或真相表

(假设A和B是状态(条件),R是结果  当你对他们做OR时

-------------------------
   A   |   B   |  R 
------------------------- 
  True | True  |  True  
-------------------------
  True | False |  True  
-------------------------
  False| True  |  True
------------------------- 
  False| False |  False
-------------------------  
 // so in Or table, when both of the conditions are false the result is False
 // while when one of them is true the result is True

和真实表

(假设A和B是状态(条件),R是结果  当你做他们的时候

-------------------------
   A   |   B   |  R 
------------------------- 
  True | True  |  True  
-------------------------
  True | False |  False  
-------------------------
  False| True  |  False
------------------------- 
  False| False |  False
-------------------------  
// so in And table, when both of the conditions are true the result is True
// while when one of them is false the result is False

我希望你现在明白为什么必须检查两个条件,即使其中一个 他们是真的.. 例如,假设您有两个条件A和B,并对它们执行OR并假设A为假

if (A || B)
// some code here

在这种情况下,它取决于条件B,如果B为假,代码将不会被执行, 如果B为真,代码将被执行..

我知道你问为什么如果A是真的它还在检查B条件,所以这是因为 OR是二元运算符..