Set
a.只需要存储不重复的key,不需要存储映射的value时,用Set集合。
b.存储Set不重复的元素集合,主要方法:
i.将元素添加进Set:boolean add(E e);
ii.将元素从Set删除:boolean remove(Object o);
iii.判断是否包含元素:boolean contains(Object o);
c.Set实际上相当于只存储Key,不存储Value的Map。我们经常用Set去除重复元素。
d.因为放入Set的元素和Map的key类似,都要正确重写equals()和hashCode()方法,否则该元素无法正确放入Set。
e.最常用的Set实现类是HashSet,实际上,HashSet是对HashMap的一个简单封装。
f.Set接口并不保证有序,但是SortedSet接口是保证元素有序的。
i.HashSet是无序的,因为它实现Set接口,不实现SortedSet接口。
ii.TreeSet是有序的,因为它实现SortedSet接口。
g.使用TreeSet时,添加的元素必须正确实现Comparable接口,如果没有实现Comparable接口,那么创建TreeSet时必须传入一个Comparator对象。
Queue(队列:先进先出)
i.先进先出(FIFO:First In First Out)的有序表。
ii.和List的区别:List可以在任意位置添加删除元素,Queue只有两个操作:
1.把元素添加到队列末尾。
2.从列队头部取出元素。
iii.定义了几个方法
iv.注意:不要把null添加到队列中,否则poll()方法返回null时,很难确定是取到了null元素还是队列为空。
v.使用poll()和peek()的区别:poll()取完队首元素并删掉;peek()取完队首元素不删,可用于重复获取。
PriorityQueue(优先队列)
i.它的出队顺序与元素的优先级相关,对PriorityQueue调用remove()或poll()方法,返回的总是优先级最高的元素。
ii.PriorityQueue的优先级通过实现Comparable接口的排序实现,放入PriorityQueue的元素要么实现Comparable接口,要么在创建PriorityQueue对象时传入Comparator对象。
Deque(双端队列)
i.允许两头都进,两头都出,即双端队列(Double Ended Queue)。
ii.功能:
1.既可以添加到队尾,也可以添加到队首;
2.既可以从队首获取,也可以从队尾获取。
iii.注意:Deque接口实际上扩展了Queue。
Stack(栈:后进先出)
i.使用
1.是一种后进先出(LIFO:Last In First Out)的数据结构。
2.由于java中遗留类Stack的问题,没有单独的Stack接口,使用Deque来模拟Stack。
3.只有入栈和出栈操作。
a.把元素压栈:push(E);
b.把栈顶元素弹出:pop();
c.取栈顶元素但不弹出:peek()。
ii.作用
1.JVM在处理Java方法调用的时候就会通过栈这种数据结构维护方法层次的调用。
2.JVM会创建方法调用栈,每调用一个方法时,先将参数压栈,然后执行对应的方法;当方法返回时,返回值压栈,调用方法通过出栈操作获得方法返回值。