zoukankan      html  css  js  c++  java
  • JAVA学习之常用集合List,Set,Map

     

    常用的集合有List,Set,Map,这三个都是接口,
    其中List,和Set继承于Collection
    而Map是一个可以保存键值对的接口

    Collection接口
    Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。
    一些 Collection允许相同的元素而另一些不行。一些能排序而另一些不行。
    Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。

    所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,
    有一个 Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。
    后一个构造函数允许用户复制一个Collection。

    如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:
    Iterator it = collection.iterator(); // 获得一个迭代子
    while(it.hasNext()) {
    Object obj = it.next(); // 得到下一个元素
    }
    由Collection接口派生的两个接口是List和Set。

    List接口,List接口常用的两个实现类是LinkedList类和ArrayList类
    List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。
    和下面要提到的Set不同,List允许有相同的元素。
    除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,
    返回一个 ListIterator接口,和标准的Iterator接口相比,
    ListIterator多了一些add()之类的方法,允许添加,删除,设定元素, 还能向前或向后遍历。 

    LinkedList类
    LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在 LinkedList的首部或尾部。
    这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
    LinkedList类采用链表结构保存对象,这种结构的优点是便于向集合中插入和删除对象,经常需要向集合中插入/删除对象时,使用此类
    效率会比较好,但对于随机访问集合中的对象,则会较慢.

    ArrayList类
    ArrayList实现了可变大小的数组。它允许所有元素,包括null。可以根据索引位置对集合进行快速的随机访问,缺点是向指定的索引位置
    插入对象或删除对象的时候速度较慢,size,isEmpty,get,set方法运行时间为常数。
    实例化方法如下:
    List<String> list=new ArrayList<String>();

    总结:基于Array的List适合查询,而LinkedList(链表)适合添加,删除操作。

    Set接口
    Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。
    很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。
    Set接口常用的实现类有HashSet和TreeSet.
    实例化方法如下:
    Set<String> set1=new HashSet<String>();
    Set<String> set2=new TreeSet<String>();
    Set 集合中的元素是不能重复的,而且是无序的,遍历Set集合元素的时候,有可能与插入Set元素时候的顺序并不一样
    遍历Set集合的方法时,可以用For循环,
    或者用Collection接口的iterator()方法取得迭代器来遍历

    Map接口
    请注意,Map没有继承Collection接口,Map提供key到value的映射。
    一个Map中不能包含相同的key,每个key只能映射一个 value。
    Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
    即Map接口遍历的时候常用到的三个方法:
    entrySet()
    返回 Set<Map.Entry<K,V>>此映射中包含的映射关系的 Set 视图。

    keySet()
    返回Set<K> 此映射中包含的键的 Set 视图。

    values()
    返回Collection<V>此映射中包含的值的 Collection 视图。

    Map接口常用的实现类有HashMap和TreeMap.通常建议使用HashMap,因为HashMap类实现的对于添加和删除的行为
    效率更高.HashMap是基于哈希表的Map接口的实现.
    而TreeMap中的映射存在一定的顺序,如果希望Map集合中的对象存在一定的顺序,那就使用TreeMap类

    HashMap允许使用Null值和Null的元素,但是要求键的唯一性,此类不保证集合的顺序,特别是不保证该顺序恒久不变
    TreeMap类不仅实现的Map接口,还实现了SortedMap接口,因此该类的集合中具有一定的顺序.但是在添加.删除和定位的时候,
    性能会比HashMap类差一些.由于TreeMap类实现的Map集合中的映射关系是根据键对象按照一定的顺序排序的.因为不允许键的对象是Null
    实现的应用中,可以通过HashMap类创建Map集合,当需要顺序输出的时候,再创建一个键值对相同的映射关系的TreeMap类,然后输出

    练习代码示例:

    import java.util.*;
    class test
    {
    public static void main(String[] args){
    List<String> d=new LinkedList<String>();
    d.add("aaa");
    d.add("bbb");
    d.add("ccc");
    d.add("ddd");
    d.add("eee");
    Set<String> set=new HashSet<String>();
    set.add("1");
    set.add("1");
    set.add("1");
    set.add("1");
    set.addAll(d);
    set.add("2");
    Set<String> intset=new TreeSet<String>();
    intset.add("1");
    intset.add("2");
    intset.add("3");
    intset.add("4");
    intset.add("5");
    intset.add("6");
    Iterator<String> i=intset.iterator();
    while(i.hasNext())
    {
    System.out.println(i.next());
    }
    Map<String,String> map=new HashMap<String,String>();
    map.put("1","11");
    map.put("2","22");
    map.put("3","33");
    map.put("4","44");
    for(int l=1;l<map.size();l++){
    System.out.println(map.get(""+l+"")+"");
    }
    Collection<String> vv=map.values();
    Iterator<String> vvi=vv.iterator();
    while(vvi.hasNext()){
    System.out.println(vvi.next());
    }
    Set<String> keySet=map.keySet();
    vvi=keySet.iterator();
    while(vvi.hasNext()){
    System.out.println(map.get(vvi.next()));
    }
    }
    }

    平时集合使用的比较多,熟悉集合类,有时会意想不到的效果哦.

  • 相关阅读:
    邻接矩阵学习
    Spark on Yarn年度知识整理
    HBASE解析
    Storm的数据处理编程单元:Bolt 学习整理
    jsch ssh服务器调用Linux命令或脚本的小问题
    storm的数据源编程单元Spout学习整理
    Java 正则表达式详细使用
    【转】如何成为一个技术全面的架构师
    【转】Linux netstat命令详解,高级面试必备
    【转】Servlet 生命周期、工作原理
  • 原文地址:https://www.cnblogs.com/fylx/p/3961530.html
Copyright © 2011-2022 走看看