2014-12-04 58 views
0

我有一个包含三个元素的列表,但是当我迭代时,我只删除一个元素并移动已删除元素的位置。列表中的其他元素在替换列表中其他元素的索引时不显示

在,那时没有被显示仅显示移除的元素的其他元素..

我下面提供我的代码。

请给我提供一些解决方案。

public class ListRemove { 
    public static void main(String []args){ 
     int i =0; 

    List<String> lst = new ArrayList<String>(); 
    lst.add("Cat"); 
    lst.add("Dog"); 
    lst.add("Rat"); 

    Iterator<String> iterate = lst.iterator(); 
    while(iterate.hasNext()){ 
     String str = iterate.next(); 
     if(str.equalsIgnoreCase("Dog")){ 
      iterate.remove(); 
      lst.set(0, str); 
      System.out.println(str); 
     } 
    } 

} 

}

O/P: 狗

预计:狗,猫,鼠

+0

你不应该当你通过它迭代改变的容器。它搞砸了东西。 – khelwood 2014-12-04 11:41:41

回答

0

为什么你只得到了狗作为输出的第一件事,是因为你有你的System.out.println(str);声明里面if块只有在有元件时才运行。对于其他元素,它不会打印任何东西。第二件事,如果你想让你的输出成为Dog,Cat,Rat,那么你不会通过使用lst.set(0, str);得到它,因为set方法会替换位置0处的元素。所以你的Cat元素将被Dog替换。所以你不会在你的输出中得到Cat。

For Info about set method

编辑:

尝试用尽管set()add()方法。

while(iterate.hasNext()){ 
    String str = iterate.next(); 
    if(str.equalsIgnoreCase("Dog")){ 
     iterate.remove(); 
     lst.add(0, str); 
    } 
} 
+0

发现它很有用 – Karthik 2014-12-04 12:14:39

+0

@Karthik检查我的编辑。 – gprathour 2014-12-04 12:17:25

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

    int swapPosition = 0; 

    List<String> lst = new ArrayList<String>(); 
    lst.add("Cat"); 
    lst.add("Dog"); 
    lst.add("Rat"); 

    for(int i=0;i<lst.size();i++){ 
     if(lst.get(i).equalsIgnoreCase("Dog")){ 
      swapPosition = i; 
     } 
    } 

    Collections.swap(lst, 0, swapPosition); 
    System.out.println("Results after swap operation:"); 
    for(String str: lst){ 
     System.out.println(str); 
    } 

} 
} 
+0

代替System.out.println(item),它以Dog and Rat的形式出现。我需要Dog Cat Rat – Karthik 2014-12-04 11:57:13

+0

你的预期输出是什么?现在你正在删除狗项目,并设置第0项作为狗..所以剩下的狗和鼠。 – John 2014-12-04 11:59:13

+0

狗猫大鼠,下面的一个好友评论说,设置( - , - )方法将取代,但我不想猫取代狗只是它必须移动到列表中的Oth元素 – Karthik 2014-12-04 12:00:29

相关问题