deque和map java 效率_Queue(队列)-Dequeue(双端队列)-Set-Map及迭代器 等相关方法...

一、队列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> entrys=map.entrySet();

然后entrys调用上述两个方法;

3)iterator():获取迭代对象;

Iteratorit = 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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值