zoukankan      html  css  js  c++  java
  • 我所理解Java集合框架的部分的使用(Collection和Map)

      所谓集合,就是和数组类似——一组数据。java中提供了一些处理集合数据的类和接口,以供我们使用

      由于数组的长度固定,处理不定数量的数据比较麻烦,于是就有了集合。

      以下是java集合框架(短虚线表示接口,长虚线表示抽象类,实线表示类,箭头表示实现接口或者继承)(在网络上找的图,不知道原作者,侵权请联系我删除)(总之,关系很复杂,所以不用记得这个图,只是用来吓吓人而已的)。

      下面贴上个人理解之精简版之Collection(集)和Map(地图?暂且这么理解吧),话说思维导图蛮好用,以下是两幅思维导图是为了方便理解自己简化的图,不代表真实继承和实现关系

    1)Collection

    Collection (集)

    1)List(列表)顺序,可重复。(顺序:元素按你插入的顺序排序)(可重复:可存在内容相同的元素,即a.equals(b)==ture);

    2)Set(集合)无顺序,不可重复。(无顺序:元素不一定按照插入顺序排序,类内部有自己的排序方式)(不可重复:不可存在内容相同元素,即a.equals(b)==false);

    1.1)List分为ArrayList,Vector,LinkedList等等

         ArrayList:本质为可变长度数组(其实就是系统在你数组空间不够的时候自动帮你换了个更大的数组),底层由数组实现,未实现线程安全。

           Vector(向量):和ArrayList类似,也是可变长度数组,但实现了线程安全,所以速度比ArrayList慢一点。

        /*线程安全:多线程访问时,采用了加锁机制,当一个线程访问数据时,其他线程不能访问该数据。*/

        LinkedList:底层为链表结构。相对于数组类型的集合,插入和删除的操作比较快。

        /*链表结构在插入删除数据所花时间少,数组结构在随机访问所花时间少*/

        

     1 import java.util.*;
     2 
     3 ArrayList al = new ArrayList();    //默认数组大小为10,也可以传入参数
     4 ArrayList<int> al = new ArrayList<int>();  //使用泛型,规定了只能传入的数据类型
     5 
     6 //常用部分方法如下
     7 
     8 al.add( 参数);     //插入元素
     9 al.get(下标);      //获得指定下标元素
    10 al.clear();          //清空容器内所有元素
    11 al.isEmpty();      //判断是否为空
    12 al.remove(下标或者数据的值);       //删除元素
    13 al.size()           //获得容器(数组)元素的个数
    14 al.set(下标,值)   //改变某个下标的值
    15 al.iterator()       //很重要,Collection几乎都有的方法,返回一个迭代器,后面会讲用法
    16 
    17 //Vector和LinkedList的方法差不多也是这样增删查改
    18 //纳闷的是Vector(向量)中有方法 capacity()可以获得容器大小,其他类没有
    ArrayList 示例

    2.2)Set分为HashSet,TreeSet,LinkedHashSet等等

        Set区别于List,它是无顺序,不可重复的。使用者若不关心数据的顺序,只关心是否存在于集合中,就可以选用Set类型。

        HashSet:根据数据元素的hash值排序。

        TreeSet:底层为二叉树结构。默认最小化树排序(由小到大)。

        LinkedHashSet:链表结构,按插入顺序排序。

    Set的常用方法其实和List类差不多,都是增删查改。

    重要的是使用迭代器遍历元素,使用以下方式可以访问Set和List中元素

    //假设有SEt类型或者List类型的对象a;
    
    Iterator i=  a.iterator();
    while(i.hasNext()){          //如果有元素
           System.out.println(i.next());   //似乎是指针的移动
    }
    
    //此方法通用于含有iterator()的集合,如Set和List等

     /*元素放入集Collection中,会失去原有类型。取出使用时注意类型转换

    2)Map

    Map有别于Collection集合的由纯数据。Map的一个单位结构为一个键值对<key,value>,相当于映射。(联想理解:map地图,key地址,value(值)地点)

    (一个地址(key)只能指向一个地点,但是地点(value)不一定只有一个地址(key)来表示。)

    map不一定是顺序的,不可重复。

    一个key对应一个value,一个value可以有多个key对应。(类似于函数)

    在Map中,可以通过查找key来得到对应的value(就像数组的下标访问,不同的是key不一定要为int类型的值,可以为各种类型)。

        HashMap:不按照建立<key,value>的顺序排序,按照元素的hash值排序(似乎不是按照hash值的大小)。

        TreeMap:底层是二叉树,最小化树。

        LinkedHashMap:链表结构,按建立<key,value>的顺序排序,似乎链表结构和数据结构都是线性结构,所以都是按照插入顺序排序。

     1 import java.util.*;
     2 
     3 Map m = new HashMap();    //或者下面这种更推荐
     4 Map<Integer,String> m = new HashMap<Integer,String>(); //使用泛型,规定了键值对<key,value>的类型。
     5 
     6 //假设已经使用了第二种构造方法
     7 m.put(2,"二");    //不同于Collection类型的add,map是用put加入元素
     8 m.put(1,"一");      //由于上面规定了键值对为<Integer,String>类型,只能传规定类型的参数。
     9 m.put(4,"四"); 
    10 m.put(2,"二");    //已经存在,不会再加入
    11 
    12 m.size()   //返回元素个数
    13 m.get(key)    //获得对应key值的value
    HashMap示例

    Map其实也可以理解为集合的形式。

    1)key集合。

    2)values集合。

    3)key-values映射集合。

     1 import java.util.*;
     2 
     3 Map<String,String> m = new HashMap<String,String>();     //<String,String>的映射
     4 
     5 m.put("东","青龙");
     6 m.put("西","白虎");
     7 m.put("南","朱雀");
     8 m.put("北","玄武");
     9 
    10 System.out.println(      m.keySet()    );    //keySet()返回key值的集合,强调map不是顺序的,所以不一定按照插入顺序输出,这里输出的序列是
    11 //南,北,东,西
    12 
    13 System.out.println(   m.values()    );       //返回value值的集合 这里是 朱雀 ,玄武,青龙,白虎
    14 
    15 System.out.println(   m.entrySet() );    //返回键值对<key,value>的集合   这里是[南=朱雀, 北=玄武, 东=青龙, 西=白虎]
    16    
    View Code

    初步的理解就是这样粗浅,如果有什么不对或者补充欢迎来消息。

    end;

    撰写时间:2017-07-24 22:21:52

    修改时间:2017-07-28 10:02:12

  • 相关阅读:
    c如何弹出保存路径/保存文件对话框
    c++ 读写txt方法
    windows获取环境变量
    Block UI 获取treelist column值
    MFC中如何弹出选择文件/文件夹对话框(C++)
    What can change the CID of a NX license server?
    spring之AOP
    spring注解开发
    spring配置Bean
    spring之IOC和DI实现
  • 原文地址:https://www.cnblogs.com/xy-hong/p/7231525.html
Copyright © 2011-2022 走看看