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的类型对应

posted @ 2022-11-17 23:03  林动  阅读(39)  评论(0编辑  收藏  举报