• List Set Map


    关系:集合三大分支 List(接口)、Set(接口)、Map(接口),其中List与Set都是Collection的子接口,Map是单独的一个接口。

    特点:

     List家族都是有序可重复(这里的有序并非集合本身的存储顺序,而是指存入与取出的顺序),下面都是List的实现类:

            ArrayList:底层用动态数组实现,更适合遍历,不适合插入删除(性能低);

            遍历方式:1.存储的形式就是数组,可以跟数组一样直接使用for循环  

            

         /*
            ArrayList遍历
             */
            List<String> list=new ArrayList<>();
            list.add("111");
            list.add("222");
            list.add("333");
            for(int i=0;i<list.size();i++){
                System.out.println(list.get(i));
            }
            System.out.println(list);

    输出:

    111
    222
    333
    [111, 222, 333]

     2.增强for循环

     /*
            ArrayList遍历
             */
            List<String> list=new ArrayList<>();
            list.add("111");
            list.add("222");
            list.add("333");
            for(String str:list){
                System.out.println(str);
            }
            System.out.println(list);

    3.Iterator迭代器,说白了就是通过List接口里的一个方法返回一个名字叫迭代器的东东,需要用到它的几个方法

    想过一个问题没有,for循环其实足够了,为啥还搞个什么迭代器,有啥意义?意义不是装逼,而是为了性能,几百几千条或许差别不大,但百万级数据性能差异就出来了。后边或许会写一篇专门讲性能差别的底层逻辑

     /*
            ArrayList遍历
             */
            List<String> list=new ArrayList<>();
            list.add("111");
            list.add("222");
            list.add("333");
            Iterator<String> it=list.iterator();
            //迭代器就是一个集装箱,里面很黑只能用手摸,集装箱里有三个小箱子,工人按照某种次序(先最近)一个一个的搬出来,
            //摸到一个,就喊一声true,直到三个搬完摸第四个的时候摸空了,喊一声false
            while(it.hasNext()){//摸到就喊true
                System.out.println(it.next());//把现在摸到的箱子打开看看是什么
            }
            System.out.println(list);
    //有没有更多的呢遍历方式呢,应该有,不过没啥意思了,常用的会了就行了,有需要再去搞其它

            Vector:跟ArrayList一模一样啊,区别是这个是早期版本,线程安全,效率较低。

    //Vector跟ArrayList差不多,不解释直接上代码看看就完事了
    /*
            Vector遍历
             */
            List<String> vector=new Vector<>();
            vector.add("111");
            vector.add("222");
            vector.add("333");
            for(String str:vector){
                System.out.println(str);
            }
            System.out.println(vector);
     /*
            Vector遍历
             */
            List<String> vector=new Vector<>();
            vector.add("111");
            vector.add("222");
            vector.add("333");
            for(int i=0;i<vector.size();i++){
                System.out.println(vector.get(i));
            }
            System.out.println(vector);
    
     /*
            Vector遍历
             */
            List<String> vector=new Vector<>();
            vector.add("111");
            vector.add("222");
            vector.add("333");
            Iterator<String> it=vector.iterator();
            //迭代器就是一个集装箱,里面很黑只能用手摸,集装箱里有三个小箱子,工人按照某种次序(先最近)一个一个的搬出来,
            //摸到一个,就喊一声true,直到三个搬完摸第四个的时候摸空了,喊一声false
            while(it.hasNext()){//摸到就喊true
                System.out.println(it.next());//把现在摸到的箱子打开看看是什么
            }
            System.out.println(vector);

      LinkedList:底层采用链表形式,插入删除性能更高,遍历性能较低。

          遍历方式一样的:1.for 2.for each 3.Iterator

      Stack:是Vector的子类,压栈的存储特点,先进后出,类似子弹弹夹

          遍历方式一样的:1.for 2.for each 3.Iterator

    总结:List接口家族下的子实现类遍历记住这三种ok了1.for 2.for each 3.Iterator

    Set家族无序无重复(相同的元素,只存储第一个,后边的就不再存入):

          HashSet:底层采用hashMap的存储方式,性能更高,非线程安全

          遍历:2.for each 3.Iterator  

          TreeSet:存入取出的是无序的,但是存入后会根据某种机制自动排序,性能更低。

          遍历:2.for each 3.Iterator 

    总结;Set集合特点是无序,无重复,无索引,由于无序没得索引,也就没有提供通过索引获取值的方法

    Map家族,键值对的存储方式(Key-Value):通过唯一的k快速寻找value

      HashMap:性能更高,线程非安全,多个线程操作一个HashMap时容易遭

      HashTable:用法跟HashMap差不多,线程安全,多线程的时候可以用它

           TreeMap:希望存入的key自动排序用它。

      遍历:map类型的遍历有所不同,1.Map.Entry ,大概是把map打包成一个Set<Map.Entry<类型,类型>>这玩意,这玩意把所有的key-value合成一个整体装在一个箱子里,然后利用它自带的getKey,getValue获得值

     /*
    Map.Entry
    */
    Map<String,String> hashMap=new HashMap();
    hashMap.put("1","111");
    hashMap.put("2","222");
    hashMap.put("3","333");
    Set<Map.Entry<String, String>> entrySet=hashMap.entrySet();
    for(Map.Entry<String,String> entry:entrySet){
    System.out.println(entry.getKey()+"="+entry.getValue());
    }
    System.out.println(hashMap);

    2.keySet()  自带的方法,可以把所有的key取出来存到一个Set集合,然后再用foreach遍历

     Map<String,String> hashMap=new HashMap();
    hashMap.put("1","111");
    hashMap.put("2","222");
    hashMap.put("3","333");
    Set<String> keys=hashMap.keySet();
    for(String key:keys){
    System.out.println(hashMap.get(key));
    }
    System.out.println(hashMap);

    3.Iterator  主要是hashMap.entrySet().iterator()返回一个迭代器,然后就

    Map<String,String> hashMap=new HashMap();
    hashMap.put("1","111");
    hashMap.put("2","222");
    hashMap.put("3","333");
    Iterator<Map.Entry<String, String>> iterator=hashMap.entrySet().iterator();
    while(iterator.hasNext()){
    System.out.println(iterator.next());
    }
    System.out.println(hashMap);
  • 相关阅读:
    python利用ffmpeg工具将视频帧推流至rtsp
    高斯曲线拟合
    Fast角点检测
    Harris角点检测和ShiTomasi角点检测
    python赋值,浅拷贝,深拷贝
    自适应阈值二值化
    Queue模块
    threading模块
    pycharm2020.3.3安装使用教程(2021.5.2更新)
    值得推荐的C/C++框架和库
  • 原文地址:https://www.cnblogs.com/hebiao/p/12822375.html
Copyright © 2020-2023  润新知