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);
                }

二、双端队列--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.常用方法
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,
  返回的是entrySet集合。
          5)containsKey(Object key):判断是否包含key;
  6)value():返回所有value的集合,不常用;
  7) containsValue(V value):判断是否包含某一value;
  8)toString():显示当前map的所有信息;
4.特点:
Map的一个特点:在存入相同的key时,最新的key-value
                               会替换掉之前的key-value                       
      































猜你喜欢

转载自blog.csdn.net/xiaozelulu/article/details/80166000