一、队列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