java 容器类的使用 Queue Stack Vector
Java容器的基本概念
Java容器类库是用来保存对象的,他有两种不同的概念:
Collection,独立元素的序列,这些元素都服从一条或多条规则。List、Set以及Queue都是Collection的一种,List必须按照顺序保存元素,而Set不能有重复元素,Queue需要按照排队规则来确定对象的顺序。
Map,Map是键值对类型,允许用户通过键来查找对象。Hash表允许我们使用另一个对象来查找某个对象。
Collection和Map
在Java容器中一共定义了2种集合, 顶层接口分别是Collection和Map。但是这2个接口都不能直接被实现使用,分别代表两种不同类型的容器。
Collection代表的是单个元素对象的序列,(可以有序/无序,可重复/不可重复 等,具体依据具体的子接口Set,List,Queue等);
Map代表的是“键值对”对象的集合(同样可以有序/无序 等依据具体实现)
参考:https://www.runoob.com/java/java-stack-class.html
队列Queue
Queue<pair> q=new LinkedList<pair>();//定义
offer()//加入到队尾
add()//加到队尾 等价于offer()
peek()//取队首元素
poll()//取队首并且删除队首
remove()//删除队首
clear()
isEmpty()
Deque :可用作stack来使用
Deque<TreeNode> stk=new LinkedList<>();
stk.push()//相当于addFirst
stk.pop()//同时会返回栈顶元素
addFirst()
addLast()
removeFirst()
removerLast()
优先队列 PriorityQueue
java默认(int) 从小到大排序
PriorityQueue<pair> q=new PriorityQueue<pair>(new mcomp());
q.offer(new pair(u,0));
PriorityQueue q=new PriorityQueue<>();
static class mcomp implements Comparator<pair>
{
public int compare(pair o1, pair o2) {
return o1.w-o2.w;
}
}//这个对Sort是从小到大排序,对优先队列也是是从小到大排序
//但是优先队列默认是从大到小排序,即不加比较函数的时候
栈Stack
Stack<pair> s=new Stack<pair>();
Stack s=new Stack();
push()
pop()//同时会返回栈顶元素
peek()//只是返回栈顶元素
isEmpty()
size()
动态数组 Vector
Vector v=new Vector();
//vector数组的声明方式
Vector<edge> h[]=new Vector [100005];
//int 型Vector数组
Vector col[]=new Vector [N];
for(int i=0;i<m;++i)col[i]= new Vector<>();
addElement()//加到最后面
removeElementAt()//删除某个下标的元素
set()//设置某个下标的值
get()=ElementAt()//获取某个下标的值
indexof()//注意不是取下标,返回此向量中第一次出现的指定元素的索引
size()//返回当前vector中元素个数
isEmmpty()
LinkedList 链表
链表的增删改效率高
查 的效率不高,因为要遍历
LinkedList<pair> v=new LinkedList<pair>();
addFirst()
addLast()
add()//根据下标插入
removeFirst()
removeLast()
set()
get()//可用于遍历
size()
HashSet
自定义类需要实现hashCode()和equals(Object obj),可以自动生成
HashSet<line> l=new HashSet<>();
size()
static class line
{
int a,b,c;
public line(int x,int y,int z)
{
a=x;b=y;c=z;
}
/* (非 Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + a;
result = prime * result + b;
result = prime * result + c;
return result;
}
/* (非 Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
line other = (line) obj;
if (a != other.a)
return false;
if (b != other.b)
return false;
if (c != other.c)
return false;
return true;
}
}
HashMap
HashMap<Integer,Integer> map =new HashMap<Integer,Integer>();
map.containsKey()
map.get()
map.put()
map的遍历:
for(Map.Entry<Vector<Integer>,Integer> entry:mp.entrySet())//里面的类型和map的类型对应