zoukankan      html  css  js  c++  java
  • Map,List的用法与区别

    区别:

    List:是存储单列数据的集合,存储的数据是有序并且是可以重复的 
    Map:存储双列数据的集合,通过键值对存储数据,存储 的数据是无序的,Key值不能重复,value值可以重复 key和value是一一对应的

    关系:

    Collection是Java中最基本的集合接口。

    Set接口:

    Set接口直接继承自Collection接口,并且方法接口上也一模一样。Set对添加的元素有一些要求,其不允许出现重复的元素,并且元素之间没有次序。这相当于一个不允许重复的离散的集合。因此,添加进Set的元素类型需要定义equals方法。若是使用自定义的类,则应该重写equals方法来确保实现自己需要的功能。

    Set接口主要实现了两个类:HashSet,TreeSet。

    HashSet是按照哈希来存取元素的,因此速度较快。HashSet继承自抽象类AbstractSet,然后实现了Set、Cloneable、Serializable接口。 
    TreeSet也是继承自AbstractSet,不过不同的是其实现的是NavigableSet接口。而NavigableSet继承自SortedSet。SortedSet是一个有序的集合。其添加的元素必须实现了Comparable接口,因为其在添加一个元素的时候需要进行排序。NavigableSet则提供了更多的有关元素次序的方法。


     
    LinkedHashSet也是Set的一个实现。和HashSet类似,只不过内部用链表来维护,按照元素插入次序来保存。

    List接口:
    List接口也是继承自Collection。与Set不同的是,List可以存储重复的元素。主要有两种实现:ArrayList和LinkedList。 
    ArrayList没有什么好说的,就像传统的数组一样,有着很快的随机存取速度,但是插入删除的速度就很慢。 
    LinkedList则与ArrayList恰恰相反,因为用链表来保存数据,所以插入删除元素的速度很快,但是访问数据的速度就不如ArrayList了。

    Map接口:
    Map(映射)是一个存储键值对的容器接口。每一个元素包含一个key对象和value对象,且元素不允许重复。 
    Map接口的实现有以下几个: 
    HashMap是最常用的一个实现。HashMap使用hash映射来存取数据,这个速度是相当快,是O(1)的速度。其容量capacity,和负载因子load factor可以在一开始设定。当元素个数达到capacity*load factor的时候,就会进行扩容。 
    LinkedHashMap和HashMap类似,只不过内部用链表来维护次序。因此遍历时候的顺序是其插入顺序。 
    TreeMap是基于红黑树的Map,插入的数据被有次序保存,并且有很高的效率。因此在遍历输出的时候可以得到排序的数据。但是这要求插入的数据实现了comparable接口。

    总结:
    Collection、Set、List和Map都是接口,不能被实例化。
    Set和List都继承自Collection,而Map则和Collection没什么关系。
    Set和List的区别在于Set不能重复,而List可以重复。
    Map和Set与List的区别在于,Map是存取键值对,而另外两个则是保存一个元素。

    用法:

    (一):List

    1:声明一个List

    // Object:指List里的值是什么类型的,Object代表可以是任何形式的
    List<Object> list = new ArrayList<Object>();

    2:方法

     (1):add()   添加数据      

    list.add("北京");
    
    list.add("深圳");
    
    list.add("上海");

    (2):get(index)

    list.get(0) // 结果:北京

     (3):size()  list里的数据个数

    list.size()

     (4):遍历list

    for(int i=0;i<list.size();i++){
    
    System.out.println(list.get(i));
    
    }

    list取值是通过下标,下标从0开始

    (二):  Map

    1:声明一个Map

    // 说明:Map是通过key-value(值键对) ,String代表key的类型(一般都是String),Object代表value的类型
    Map<String,Object> map = new HashMap<String,Object>();

    2:put(key,value)  赋值

    map.put("name", "小明");
    
    map.put("sex", "男");
    
    map.put("age", 18);

    3:get(key)  取值      

    // 结果:小明
    map.get("name") 


     (三):List<Map>

    1:声明一个List<Map>

    List<Map<String,Object>> listMap = new ArrayList<Map<String,Object>>();

    2:赋值

    (1):先赋值给Map

    Map<String,Object> map1 = new HashMap<String,Object>();
    
    map1.put("name", "小明");
    
    map1.put("sex", "男");
    
    map1.put("age", 18);
    
    Map<String,Object> map2 = new HashMap<String,Object>();
    
    map2.put("name", "小红");
    
    map2.put("sex", "女");
    
    map2.put("age", 16);

    (2):将map添加到List中

    listMap.add(map1);
    
    listMap.add(map2);
    
    // 结果:[{sex=男, name=小明, age=18}, {sex=女, name=小红, age=16}]

    (3):遍历

    for(int i = 0;i<listMap.size();i++){
    
    System.out.print(listMap.get(i).get("name"));
    
    System.out.print(listMap.get(i).get("sex"));
    
    System.out.print(listMap.get(i).get("age"));
    
    System.out.println();
    
    }
  • 相关阅读:
    详说清除浮动
    ie7 z-index 失效问题
    ul里不能直接嵌套div(在ie7以前版本)
    jQuery 发送验证码倒计时按钮
    VBA: Cant find project or librar
    InstallShield Limited Edition制作安装文件
    InstallShield制作升级安装包
    VBA 获取Sheet最大行
    求两条线段交点zz
    VBA找不到progress bar的处理办法。
  • 原文地址:https://www.cnblogs.com/wanlige/p/13048366.html
Copyright © 2011-2022 走看看