容器深入研究

第十七章 容器深入研究

  • 完整的容器分类法

    • 容器分为Collection集合类和Map键值对类

    • Collection 接口:

      1. List 接口 (按插入顺序保存,元素可以重复):

        1. ArrayList (相当于大小可变的数组,随机访问快,插入移除慢)
        2. LinkedList(插入移除快,随机访问慢)
      2. set 接口(不能有重复元素)

        1. HashSet(元素无序,查询速度非常快)
        2. LinkedHashSet(按插入顺序保存,同时有HashSet的查询速度)
        3. TreeSet(按元素升序保存对象,或者根据元素实现的比较器排序)
      3. Queue接口(一头进一头出)

        1. PriorityQueue(优先级高的先出,也实现了List接口)
      4. Map接口

        1. HashMap (查找速度快,内部无规则排序)
        2. LinkedHashMap(按插入顺序排序,查找速度快)
        3. TreeMap(根据元素实现的比较器排序)
  • 填充容器

    所有Collection的构造器都可以接收另一个Collection来填充自己

  • Collection的功能与方法

    boolean add(T) //确保容器持有具有泛型类型T的参数 
    boolean addAll(Collection<? extends> T) //添加参数中的所有元素,只要添加了任意元素就返回true
    void clear() //移除容器中的所有元素
    boolean contains()//如果容器中包含此参数,返回true
    boolean containsAll()//如果容器中有此参数中的所有元素,返回true
    boolean isEmpty()//容器中没有元素返回true
    boolean remove(Object)//如果参数在容器中,则移除此元素的一个实例。如果做了此操作,反悔true
    int size()//返回容器中元素的数目
     
    
    1. 迭代器接口方法
      1. hasNext() : 判断是否存在下一个对象元素
      2. next() :获取下一个元素
      3. remove() : 移除元素
  • List的功能与方法

    1. List:

      get(int) //获取指定索引位置的列表元素
      set(int,E) 设置指定索引位置的列表元素
      add(int,E) 将指定的元素添加到此列表的索引位置。
      remove(int) 移除指定索引位置的元素;
      indexOf(Object) 从列表头部查找Object对象元素
      lastIndexOf(Objcet) 从列表尾部查找Object对象元素
      listIterator() 返回列表迭代器
      listIterator(int) 返回指定索引位置的列表迭代器
      subList(int,int) 该方法返回的是父list一个视图,从fromIndex(包含),到toIndex(不包含)
      
    2. ListIterator:

      hasPrevious() 如果以逆向遍历列表,列表迭代器前面还有元素,则返回 true,否则返回false
      previous() 返回列表中ListIterator指向位置前面的元素
      set(E) 从列表中将next()previous()返回的最后一个元素返回的最后一个元素更改为指定元素
      add(E)  将指定的元素插入列表,插入位置为迭代器当前位置之前
      nextIndex() 返回列表中ListIterator所需位置后面元素的索引
      previousIndex() 返回列表中ListIterator所需位置前元素的索引
      
  • Set和存储顺序

    1. 加入Set的元素必须确保对象的唯一性(定义equals()方法)
    2. hashcode() 只有这个类被置于HashSet或者LinkedHashSet中时才是必需的
    3. SortedSet:按对象的比较函数对元素排序;LinkedHashSet:元素的插入次序
  • MAP

  • 散列与散列码

    1. 散列码是相对唯一的、用以代表对象的int值,它是通过将该对象的某些信息进行转换而生成的
    2. hashMap使用equals()判断当前的键值是否与已存在的键相同
    3. 默认的equals()方法只是比较对象的地址,如果使用自定义的类作为hashMap的键时,要重写hashCode()和equals()
    4. 重写equals()需要满足五个条件:自反性,对称性,传递性,一致性,对任何非null 的值,equals(null) 返回false
    5. 使用散列的目的在于:想要使用一个对象查找另一个对象
    6. HashMap查询快速的原因在于使用散列码进行查询。当查询的散列码对象唯一,则散列码对应的位置就是要查找的元素,如果不唯一,则散列码对应的下标所在数组元素保存的是一个集合,然后使用集合的equals()方法进行查询
  • 散列

    散列就是将一个对象生成一个数字保存下来,然后在查找这个对象时直接找到这个数字就可以了,所以散列的目的是为了提高查找速度,而手段是将一个对象生成的数字与其关联并保存下来。这个生成的数字就是散列码。而生成这个散列码的方法称为散列函数(hashCode())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值