美文网首页
Java 集合

Java 集合

作者: Lost_Robot | 来源:发表于2017-11-08 16:16 被阅读58次
    1.集合框架的分类

    1.Java 中基本的集合框架: Java Collections Framework
    提供了对集合的定义,操作,和管理的一组接口。

    集合

    2.Java 中提供了两种不同的集合实现

    接口 子类
    Collection<E> 集合类的根接口,Java中没有直接的实现类,但是有继承的接口Set(无序,元素不允许重复)和List(有序,元素可重复,提供按索引访问方式)。
    Map<K, V> Java中另一个接口,与collection无关,但是属于集合类,以Key-Value的形式保存数据,Key唯一,但是Value可以重复。
    Iterator 所有集合类都实现了该接口,用于遍历集合中元素的接口,3个方法,hasNext()是否还有下一个元素,next()返回下一个元素,remove()删除当前接口。
    2.它们的区别

    1、List(有序、可重复)
    List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。

    2、Set(无序、不能重复)
    Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。

    3、Map(键值对、键唯一、值不唯一)
    Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。

    名称 子接口 是否有序 元素是否允许重复
    Collection
    List
    Set AbstractSet
    HashSet
    TressSet 是(用二叉树排序)
    Map Abstractmap k-v映射,K不可重复V可重复
    HashMap k-v映射,K不可重复V可重复
    TreeMap 是(二叉树排序) k-v映射,K不可重复V可重复
    3.集合实现
    类名 区别
    ArrayList 增删操作较多的情况下,查询较少的情况下使用,两者用法没有区别,功能上有区别
    LinkedList 查询较多的情况下,增删较少的情况下使用,,两者用法没有区别,功能上有区别

    类名 区别
    HashMap 是最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的,因为键对象不可以重复,所以HashMap最多只允许一条记录的键为Null,允许多条记录的值为Null,是非同步的
    Hashtable 是HashMap的线程安全版,它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢,它继承自Dictionary类,不同的是它不允许记录的键或者值为null,同时效率较低。
    ConcurrentHashMap 线程安全,并且锁分离。ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的hash table,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。
    LinkedHashMap 保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的,在遍历的时候会比HashMap慢,有HashMap的全部特性。
    TreeMap 实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序(自然顺序),也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。不允许key值为空,非同步的;
    4.使用

    Map的遍历(两种方式):

    Map map = new HashMap();
    map.put(key,value);
    
    //先获取map集合的所有键的set集合,keyset(),将Map中所有的键存入到set集合中。
    //因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。
    // keySet():迭代后只能通过get()取key 。
    //取到的结果会乱序,是因为取得数据行主键的时候,使用了HashMap.keySet()方法,而这个方法返回的Set结果,里面的数据是乱序排放的。
    Iterator it = map.keySet().iterator();
     //获取迭代器
    while(it.hasNext()){
    Object key = it.next();
    System.out.println(map.get(key));
    }
    
    //将map集合中的映射关系取出,存入到set集合
    Iterator it = map.entrySet().iterator();
    while(it.hasNext()){
    Entry e =(Entry) it.next();
    System.out.println("键"+e.getKey () + "的值为" + e.getValue());
    }
    //entrySet()方法,效率较高
    //对于keySet其实是遍历了2次,一次是转为iterator,一次就是从HashMap中取出key所对于的value。
    //对于entryset只是遍历了第一次,它把key和value都放到了entry中,所以快了。两种遍历的遍历时间相差还是很明显的。
    
    
    5.Android中的使用示例

    自己可以写一下

    相关文章

      网友评论

          本文标题:Java 集合

          本文链接:https://www.haomeiwen.com/subject/fyejpxtx.html