zoukankan      html  css  js  c++  java
  • java核心学习笔记(三) java集合框架

    参考博客:JAVA集合类汇总

    一、图示理解

        把上面链接的图盗过来,这张图很清晰的展示了整个java集合框架的架构图。

        实线边框的是实现类,折线边框的是抽象类,点线边框的是接口。

        空心三角箭头实线段,代表继承;空心三角箭头虚线段,代表接口实现(不一定真的实现,可能只是一种抽象类声明),黑色尖头虚线代表依赖,就是将对方当做自己的方法形参,黑色尖头实线代表关联,就是引用对方作为自己的数据域。

        java集合框架是诠释java多态性的很好的实例,通过集合框架可以很好的理解多态。

        图中可以看出集合框架 的底层设计 为 两大接口:Collection 和 Map ,而Collection又依赖Lterator,这是什么意思呢?

        Collection接口的含义是“集合”,通过Collection接口提供的方法,我们可以对具体的集合进行操作,Map接口含义是“地图”,代表像地图一样的key-value对,但是这两种接口并没有提供他们的遍历方法,所以Iterator就是给Collection提供遍历方法的接口。由图可以看出,Map并没有直接依赖Iterator,所以遍历Map需要先将其实现类型转化为Collection的实现类型。

        Iterator包含三个主要方法;

    1.hasNext()是否还有下一个元素。
    2.next()返回下一个元素。
    3.remove()删除当前元素。

    其中需要注意TreeSet 和 TreeMap是有序的,利用二叉树进行排序,而hash家族利用键或索引的hashcode来进行查找所以很快。

    二、遍历

        iterator的形式:

    Iterator it = arr.iterator();
    while(it.hasNext()){ object o =it.next(); ...}


    Map集合:

    HashMap,根据键的hashcode值存储数据,无序,便利时取得的KV对顺序是完全随机的,而且HashMap是非同步的,及没有synchronized关键字,所以是线程不安全的。

    Hashtable,HashMap的线程安全版,不允许记录的键或值为null,由于synchronized,所以在同一时刻只允许一个线程对其进行读写,所以会牺牲部分速度

    ConcurrentHashMap,线程安全且锁分离,锁分离是指,将内部代码分段,每一段有各自的锁,而不是整体加一个锁,所以当操作发生在不同的段上,就可以并发执行

    LinkedHashMap,保存了插入顺序的HashMap,遍历时按插入顺序取得

    Treemap,实现的是SortMap接口,可对map按照键进行排序,默认是按照键值得升序进行排序(自然顺序),也可以指定排序器。

    Map的遍历:需要将Map转化为set,再利用遍历器遍历,具体如下:

    Iterator it = map.entrySet().iterator();
    while(it.hasNext()){
    Entry e =(Entry) it.next();
    System.out.println("键"+e.getKey () + "的值为" + e.getValue());
    }

    或者

    erator it = map.keySet().iterator();
     //获取迭代器
    while(it.hasNext()){
    Object key = it.next();
    System.out.println(map.get(key));
    }

     

    第一种方式是将Map转化为 entry set,这样只需遍历一次,第二种试讲map转化为keyset,这样再转化的时候需要遍历一次,在取值时还需要遍历一次,所以使用entryset比较好。

  • 相关阅读:
    开始学习C#
    关于串口数据读取的几个问题
    Joel测试
    VC查找内存泄漏技巧【转】
    思考题一
    自我介绍
    2020面向对象程序设计寒假作业1 题解
    思考题二
    题解 洛谷P2158 【[SDOI2008]仪仗队】
    深入浅出InfoPath系列
  • 原文地址:https://www.cnblogs.com/Theshy/p/7368280.html
Copyright © 2011-2022 走看看