zoukankan      html  css  js  c++  java
  • 集合

    集合:


    集合接口:

    java类库将集合的接口和实现分离。队列的实现:循环数组和链表;前者更高效,后者没有上限。

    AbstractQueue类用于用户自己实现队列类。

    cllection(extends Iterable<E>)接口:基本方法1.boolean add() 2 iterator方法返回一个迭代器(next;hasnext;remove)

    Collection<E> coll=......;

    Iterator<String> iter=coll.iterator();//返回的迭代器在coll引用的对象中定义

    while (iter.hasNext()){

      String a = iter.next();

      do something with a......

    }

    增强for循环(要求实现了iterable接口):

    for(string a in c){do something with a......}

    iterable接口:iterator方法返回一个实现Iterator接口的对象;

    iterator接口:hasnext,next,remove方法

    1将迭代器视为位于两个元素之间。2必须先next,再remove

    ohter methods:contains.......

    AbstractCollection类实现了Collection接口:让实现Collection接口更加方便,除了iterator和size被抽象化,contains以及其他方法都提供了例行方法。

    除了以map结尾的(实现map接口),其他集合都实现clloctive接口

    具体的集合:

    LIST:

    链表:

    public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, Serializable

    ListItertor迭代器:

    有序集合,使用迭代器添加元素。interface ListItertor<E> extends Iterator<E>{void add(E element); E previous(); boolean hasprevious();(反向遍历链表)}

    想在链表中间插入元素:1.调用链表listIterator(),返回一个listIterator迭代器对象 2.调用迭代器中的add方法

    两个迭代器之间的冲突

    使用get方法获得元素,导致效率低,可能使用了错误的数据结构。每次get之前都会从头重新开始搜索。

    List.listlistIterator(n)

    使用链表的理由:减少在列表中插入或删除元素所付出的的代价

    避免在链表中实现整数索引:get(n),set(n),ListIerator(n),如果要进行这种随机访问最好用Arraylist。

    注意迭代器所在位置,如果调用next后,add了一个元素,则此时迭代器在add的元素后面。

    ArrayList:可以随机的访问每个元素的集合类。 

    SET

    散列集:

    散列冲突,桶数目通常为元素的75%到150%,且为素数,以防集聚。装填因子为0.75时,以双倍桶数进行再散列

    hashset:add,contains已被重写

    迭代器访问时随机的,不关心元素中的顺序时使用。


    2016-09-24

    树集(有序集合):添加元素比散列表慢,比数组或链表快。查找复杂度:log2n

    对象的比较:

    一、元素对象中默认的compareto()方法

    二、通过构造器:(不同集合中实现不同的比较方式,对象的类中没有实现compareable接口)

    TreeSet(Comparator<? super E> comparator) compartor接口实现int coparator(T a , T b)方法,将实现了这一接口的对象传入Treeset的构造器,告诉Treeset如何对对象进行比较。比较器内没有数据,只是方法的持有期成为函数对象,通常动态定义,即定义为匿名内部类的实例。

    总之一定要有以上二者之一,才能将元素插入TreeSet中。

    Coparable接口:int compareto(T other);类中含有接口,说明类对象本身可以与其他对象相比较

    Comparator接口:int comparator(T a, T b);类中含有接口,说明可以比较两个相同类型的对象,这个类中通常只有比较的方法(函数对象),可以匿名内部类定义

    QUEUE

    Qeque接口->Deque接口:在头部和尾部同时添加删除对列,不支持中间添加。

    add,offer(尾部),remove,poll(头部),get,peek(各两种方法)

    优先级队列:

    映射表:HashMap和TreeMap

    1.散列或排序都只针对键而言

    2. 散列插入更加快,如果不需要按顺序访问键,就选择他

    V put(K,V),get(),remove,size

    集合框架并没有将映射表本身视为一个集合,然而可以获得映射表的视图。

    Set<K> keySet()

    Collection<V> values()

    Set<Map.Entry<K,V>> entrySet()

    Entry是map接口的内部接口,上式的Set<Map.Entry<K,V>>是实现了Set接口的对象,而这个对象中的元素类型是实现了Map.Entry<K,V>接口的类。

    interface Map.Entry<K,V>方法:get key ; get value; set value


    2016-09-25

    专用集和应用表类:

    1 weakHashMap:当堆键的唯一引用来自散列表条目时,这一数据结构将与垃圾回收器协同工作一起删除键/值对

    2 linkedHashSet & linkedHashMap:

    3 Enumset & Enummap

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    poj2082单调栈
    Javascript权威指南——第二章词法结构,第三章类型、值和变量,第四章表达式和运算符,第五章语句
    Javascript权威指南——第一章Javascript概述
    前端工程师理解
    easyui tree获取直接子节点而不获取孙子节点方法
    centos linux安装telnet 过程及问题(源于内部tomcat网站,外部无法访问)
    AspectJ基础学习之三HelloWorld(转载)
    AspectJ基础学习之二搭建环境(转载)
    AspectJ基础学习之一简介(转载)
    js数组特定位置元素置空,非null和undefined,实现echarts现状图效果;谷歌格式化压缩js代码
  • 原文地址:https://www.cnblogs.com/ChuPengcheng/p/5898825.html
Copyright © 2011-2022 走看看