Maison  >  Article  >  Java  >  Comparez la différence entre foreach et for

Comparez la différence entre foreach et for

巴扎黑
巴扎黑original
2017-09-05 14:06:202905parcourir

L'éditeur suivant vous apportera un cliché sur la différence entre foreach (boucle for améliorée) et for. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur pour y jeter un œil

Tout d'abord, parlons de foreach, qui est également appelé boucle for améliorée. Foreach est en fait une version simplifiée spéciale de la boucle for.

Parlons du format d'écriture de foreach :

for (type d'élément nom de l'élément : traverse array (set) (ou itérable) ) {

Déclaration

}

Bien que foreach soit une version simplifiée de la boucle for, cela ne signifie pas que foreach est plus utile que foreach convient à une boucle inconnue. Ou cela peut être plus efficace lorsque le calcul du nombre de boucles est difficile, mais certaines boucles plus complexes doivent encore être utilisées pour des boucles pour être plus efficaces.

Regardons l'exemple suivant :


public static void main(String[] args) {
  List<String> arr = new ArrayList<String>();
  arr.add("你好");
  arr.add("我好");
  arr.add("大家好");
  
  //foreach循环
  for(String str : arr){       //这里的str就是为了获取每次循环的arr中的值
   System.out.println(str);       //就相当于 String str=arr[i]
  }
 }

Mais en comparaison nous utilisons The pour l'entrée en boucle est un peu gênante


public static void main(String[] args) {
  List<String> arr = new ArrayList<String>();
  arr.add("你好");
  arr.add("我好");
  arr.add("大家好");
  
  //for循环
  for(int i=0;i<arr.size();i++){
   System.out.println(arr.get(i)); //要获取list中元素需要用get方法 
  }
 }

En plus de cette collection ordinaire, vous pouvez également utiliser des paires clé-valeur comme map

Par exemple :


public static void main(String[] args) {
  Map<String,String> mapstr = new HashMap<String,String>();
  mapstr.put("王", "男");
  mapstr.put("李", "男");
  mapstr.put("张", "女");
                      //entrySet方法是为了获取键值对的集合
  for(Map.Entry<String, String> s : mapstr.entrySet()){ //这里的Map.Entry<String, String>其实就是一个类型 用来表示键值对的类型
   System.out.println("key="+s.getKey());   //这里其实还是相当于 s=maostr.entrySet,只不过s存储的是键值对。
   System.out.println("value="+s.getValue());  //所以可以用get方法获取出来存储的键值对。
  }
 }

De plus, foreach ne prend pas en charge l'ajout et la suppression d'opérations dans la boucle, car lors de l'utilisation de la boucle foreach, le tableau (collection) est déjà verrouillé et ne peut pas être modifié, sinon il signalera java.util.ConcurrentModificationExceptionException

Par exemple :


public static void main(String[] args) {
  List<String> arr = new ArrayList<String>();
  arr.add("你好");
  arr.add("我好");
  arr.add("大家好");
  
  //foreach循环
  for(String str : arr){     
   System.out.println(str);   
   arr.add("1");     //对arr进行添加 
  }
 }

À propos du principe de ne pas pouvoir ajouter et supprimer et comment le faire dans foreach L'ajout et la suppression seront abordés dans le prochain article.

Le résumé est donc le suivant :

foreach convient simplement pour parcourir une collection ou un tableau, tandis que for est plus efficace dans des contextes plus complexes boucles.

Foreach ne peut pas modifier le tableau ou la collection (opérations d'ajout ou de suppression). Si vous souhaitez le modifier, vous devez utiliser une boucle for.

La boucle for est donc plus flexible en comparaison.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn