java语言的集合

集合:
性质:是一个用于存储多个对象的容器,容器内的对象就是元素容器内存储的都是元素的地址,集合框架中含多种接口,抽象类
实现类等来满足我们的需求,(元素必须是引用类型的数据,不能是基本数据类型的数据)

Collection

集合的顶级父接口
    常用方法:boolean  add(E e)
                      int size()
                      boolean addAll(Collection c)
                      void clear()
                      boolean contains(Object obj)
                      boolean containsAll(Collection c)
                      boolean isEmpty()
                      boolean remove(Object o)
                      boolean removeAll(Collection c)
                      boolean retainAll(Collection c)
List(列表):
性质:此接口对应的实现类的特点是:有序的,可以重复的
    常用方法:void add(int index,E element)
                 E get(int index)
               int indexOf(Object obj)
               E set(int index,E newElement)
               boolean remove(int index)
               List<E> subList(int fromIndex,int endIndex)
          此方法在堆中不会产生新的集合对象。
                  变量引用的父集的一部分。
                  修改子集,会影响父集  
          int lastIndexOf(Object obj)
实现类:ArrayList(性质:底层是基于动态数组的数据结构,有序存放)
       LinkedList(底层是基于双链表的数据结构,每一个存储单元都要涉及到其他两个引用)
       优缺点:在执行get()/set()时,ArrayList的效率高,LinkedList需要移动指针,效率低
               在增加/删除操作时,LinkedList效率高,ArrayList效率低(需要扩容,移动元素)。
       Vector:是一个比较古老的集合类型,线程安全,但是效率特别低,不建议使用
Stack(栈):
常用方法:void push(E e)将项目推送到此堆栈的顶部。 
         E pop()删除此堆栈顶部的对象


Queue(队列):
性质:通常是一段进(offer)一段出(poll)
    常用方法:boolean offer(E e)
              E pool()
              E peek()
子接口:Deque(双端队列)性质:两端都可以进,也都可以出
常用方法:boolean offerFiret(E e):在deque的前面插入对象e,违反容量限制返回false
         boolean offerLast(E e):在deque的后面添加对象e,违反容量限制返回false
         E pollFirst():检查并删除deque第一个元素
         E pollLast():检查并删除deque最后一个元素
         E peekFirst():返回队首元素
         E peekLast():返回队尾元素
Set接口:
性质:无序,存储的元素与添加顺序无关,不可重复(使用equals方法来判定是否重复)
      能存储null元素,只能存储一次
      当向集合中 

子类:HashSet(通过实现hash算法的一种数据结构,无序,不重复)
        LinkedHashSet(通过实现hash算法的一种数据结构,但是通过链表来维持顺序。顺序与添加顺序一致)
        TreeSet(使用二叉树的一种数据结构,顺序与自然排序有关系,支持定制排序)
Hash算法机制
当向集合添加元素时我们需要调用equals方法来一一校验。但是元素过多时,我们校验的次数明显增多,因此效率就很低。
        提高效率的方法:我们为元素对象,提供一个hash算法(哈希值),用于返回此元素的一个hash值(int值)。并且在集合所占的内存中开辟很多小的区域
        每个区域用于存储一定范围哈希值的元素。

重写HashCode方法:
       重写规则:尽可能的让所有的成员变量都参与运算,
                         尽可能的避免出现hash值碰撞
注意:
       重写的必要性:
   (1)如果重写了equals(), 有必要重写hashCode方法
   (2)如果equals()返回true, hashCode返回值有必要相同
   (3)如果equals()返回false,hashCode返回值不一定相同,
            如果返回值不同,可以提高检索的效率
    
   反过来说:
    (1)hashCode值相同,equals方法可能不同
    (2)hashCode值不同,equals方法一定不同 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值