循环方式for forEach

for高级循环

for(数据类型 变量名: 被遍历的集合(Collection)或者数组)

只能取出,不能增删。

对集合进行遍历:只能获取集合元素。但是不能对集合进行操作。

传统for与高级for区别:

高级for有一个局限性。必须有被遍历的目标。

public class ForDemo {
    public static void main(String[] args) {
        HashMap<Integer, String> hm = new HashMap<Integer, String>();
        hm.put(1, "a");
        hm.put(2, "b");
        hm.put(3, "c");

        Set<Integer> keySet = hm.keySet();
        for (Integer i : keySet) {
            System.out.println(i + "::" + hm.get(i));
        }

        for (Map.Entry<Integer, String> me : hm.entrySet()) {
            System.out.println(me.getKey() + "::" + me.getValue());
        }
    }
}

lambda表达式(jdk1.8出现的)

集合.foreach(变量->{代码块});

foreach这种循环一般只适合做数组的遍历,提取数据显示等,不适合用于增加删除和使用下标等复杂的操作。

public class ForDemo {
    public static void main(String[] args) {
            HashMap<Integer, String> hm = new HashMap<Integer, String>();
            hm.put(1, "a");
            hm.put(2, "b");
            hm.put(3, "c");

            hm.forEach((k,v)->{
               System.out.println("key:"+k+"value:"+v);
           });



            Set<Integer> keySet = hm.keySet();
            keySet.add(3);

           keySet.forEach(temp->{
                System.out.println(temp);
            });

          

            List<String> list = new ArrayList<>(6);
		    list.add("1");
		    list.add("2");

		    list.forEach(v -> System.out.println(v));

        }

}

 对于Map的遍历:

  • 使用 entrySet遍历 Map类集合 KV,而不是 keySet方式进行遍历。
  • 说明:keySet 其实是遍历了2 次,一次是转为 Iterator 对象,另一次是从 hashMap 中取出key所对应的 value。而 entrySet 只是遍历了一次就把 key和value都放到了entry中,效率更高。如果是 JDK8,使用 Map.forEach 方法。
  • 正例:values()返回的是 V值集合,是一个 list 集合对象;keySet()返回的是K 值集合,是一个 Set 集合对 象;entrySet()返回的是K-V值组合集合。
package com.liu.exer;

import java.util.HashMap;
import java.util.Map;


public class testFor {

        public static void main(String[] args) {
            Map<String, Integer> map = new HashMap<>();
            map.put("a", 123);
            map.put("b", 456);
            map.put("c", 12);

            //速度最慢,相当于先把所有key查出来一遍,再根据key查value。遍历两遍
            for (String key : map.keySet()) {
                System.out.println(key + ":" + map.get(key));
            }

            //速度最快,一层一层查
            for (Map.Entry<String, Integer> entry : map.entrySet()) {
                System.out.println(entry.getKey() + ":" + entry.getValue());
            }


            //java8以上,速度介于两者之间,也是一层一层查,但是forEach速度比for慢
            map.forEach((k,v)->{
                System.out.println("key:"+k+"value:"+v);
            });
        }

}

list是父类型,arraylist是子类型

List集合:存放的数据可以重复,并且有顺序

ArrayList:

底层是Object数组  增删很慢,查询很快

 //object :Integer ,String ,Float,Boolean lista就是杂货店,没有泛型
        List lista = new ArrayList();
        lista.add(1);
        lista.add("see");
        lista.add(23.5);
        lista.add(true);

        //集合只能存放自定义数据类型
        //List<String> list = new ArrayList<String>(6);   全写方式,list是泛型 自定义了String类型
        List<String> list = new ArrayList<>(6);
        //添加
        list.add("ss1");
        list.add("2");

        //根据内容删除
        list.remove("ss1");
        //根据下标删除
        list.remove(1);
        //移除集合中所有元素
        list.clear();
        //修改集合中的元素,指定位置
        list.set(0, "www");
        //遍历list
        list.forEach(v -> System.out.println(v));

        //字符character,单引号
        List<Character> characters = new ArrayList<Character>();
        characters.add('2');

LinkedList :

底层是链表。增删很快,查询慢

LinkedList的增删改查方法和ArrayList用的一样add set remove 

       List<String> bookList=new LinkedList<String>();
       bookList.add("从入门到放弃");
       bookList.add("面向");
        //list集合转数组
        Object[] objects = bookList.toArray();

 book0List集合装入bookList1集合里:

       List<String> book0List=new LinkedList<String>();
       book0List.add("从入门到放弃");
       book0List.add("面向");
      
       List<String> bookList1=new LinkedList<String>();
       bookList1.addAll(book0List);
package com.liu.exer;

import java.util.*;


public class testFor {

    public static void main(String[] args) {
       List<String> book0List=new LinkedList<String>();
       book0List.add("从入门到放弃");
       book0List.add("面向");

       List<String> bookList1=new LinkedList<String>();
        Object[] objects = bookList1.toArray();
        for (Object object : objects) {
            //加""转换为字符串
            System.out.println(object+"");
        }

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值