首页 > 编程知识 正文

queue队列的用法,队列queue的详细讲解

时间:2023-05-03 17:25:00 阅读:237182 作者:32

一、队列Queue

        1.是一个接口
                    作用:使数据只能一端进,一端出。--先进先出,经常发生增删
        2.LinkedList:就实现了此接口
                   ArrayList:没有实现此接口,因为队列经常发生增删,
                  LinkedList:在增删上效率快。
       3.常用方法:
                 1)offer(E e):进入队列;
                 2)poll():从队首出,移除它,返回出来的元素(一般习惯先查看队首是否为空);
                 3)peek():查看队首;
                         while(list.peek()!=null){
                                   String e3 = list.poll();   //移除队首,并返回它;
                                   System.out.println("  移除的队首是:"+e3);
                         }

boolean add(E e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true, 如果当前没有可用的空间,则抛出 IllegalStateException。 E element() 获取,但是不移除此队列的头。 boolean offer(E e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时, 此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。 E peek() 获取但不移除此队列的头;如果此队列为空,则返回 null。 E poll() 获取并移除此队列的头,如果此队列为空,则返回 null。 E remove() 获取并移除此队列的头。 二、双端队列--Dequeue

               1.是一个接口,是Queue的子接口;
               2.意义:每端可进可出;
               3.栈:双端队列把一段封闭,只用另一端来进行增删元素
                           就是栈的数据结构了;--先进后出 ; 使用push(E e);
              4.常用方法
                          addFirst(Object ob):在队首增加元素
                          addLast(Object obj):在队尾增加;
                          peekFirst():查看队首;
                          peekLast:查看队尾;
                          pollFirst:移除队首;
                          pollLast:移除队尾;            

 

三、Set接口

                  1.无序,不可重复;
                  2.比喻:
                          List好比一个有格子顺序的盒子
                         Set好比一个袋子。
                 3.实现类:
                           HashSet:底层是基于散列算法(哈希算法)来存储的数据结构
                           TreeSet:底层是基于有序的二叉树的数据结构
                           TreeSet是Set接口的有序的二叉树集合实现类
               4.重写HashCode()和equals方法的成立方法
                           hash值相同,equals不一定为true
                           hash值不同,equals一定false.
                           equals为true,hash值一定相同
                           equals为false,hash值有可能一样
              5.entry常用方法
                        1)getKey():获得key值;
                        2)getValue():获得value值;
                               Set<Entry<String,String>> entrys=map.entrySet();
                               然后entrys调用上述两个方法;
                        3)iterator():获取迭代对象;
                                Iterator<String> it = set.iterator();
                                while(it.hasNext()){
                               System.out.println(it.next());
                               }
                       4)add(Object obj):将obj添加set集合;
            6.注意
                    Set在存入元素时,是无序的,与放入顺序无关。  当Set集合中的元素不变,不管取多少次,取出来的
                    顺序是一致的。
         7.为什么会有哈希算法?
                 原因:我们需要找一个元素得跟所有的元素运用equals比较才能确定,
                 这样,效率是非常低。
               

 解决方法:         设计了散列算法,即为每一个对象分配一个  值。在集合中,设计多个区域,每个区域存储一部分  的哈希值的对象。在添加元素时,根据元素的值,就可以确定  所在区域。然后看这个值是否存有对象,没有对象,就可以存此元素。  当已经存有对象时,我们要比较equals方法,如果不一样,我们就可以继续  存元素,存在此值对应的链表中。一样的话,说明不能再添加进来了。


          8.总结
                      总结:
                            往Set集合中存元素时,
                                1:先计算哈希值,
                                      哈希值不一样,就能添加。
                                      哈希值一样时,要转入2
                                2:比较equals方法(equals是非常重要的)
                                      返回false,----能存----存到链表
                                      返回true.----不能存
                               3.没有重写hashCode(),会随机产生一个哈希值,

在自定义类时,要重写hashCode方法和equals方法;
在查询效率上是很低的。因此我们要尽量避免出现链表这种情况。

 

四、Map接口:   和Collection一样是父接口,

 1.概念:
              1) 存储数据是以key-value形式存储的;
              2)key相当于value的索引;
              3)作为key的对象类型必须重写hashCode方法。 因为key也是唯一的,不能重复的;
              4)Map的key底层就是hashSet集合(Set接口无序不可重复)。
              5)特点:key值可以为null.
 2.实现类
              HashMap:存数据时都是以key-value这种形式存入的。
3.常用方法       

 1)put(K k,V v):作用是向Map对象中添加元素        2) get(K k):作用是通过k获取对应的value值;当Map中没有相应的k,那么返回的value就是null          3)keySet():获得所有key的Set集合;         4)entrySet(): 将map中每一个key-value封装成内部类对象Entry, 返回的是Set集合。          5)containsKey(Object key):判断是否包含key;        6)value():返回所有value的集合,不常用;          7) containsValue(V value):判断是否包含某一value;          8)toString():显示当前map的所有信息; 9)size():返回此映射关系数,Set Map有此方法,List没有


4.特点:
        Map的一个特点:在存入相同的key时,最新的key-value .  会替换掉之前的key-value

 

 

 

       

 

 

UCDN违规事件处理说明 云分发 UCDN

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。