java 容器类的使用 Queue Stack Vector
Published on 2022-11-17 23:03 in 暂未分类 with 林动

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 @   林动  阅读(43)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · winform 绘制太阳,地球,月球 运作规律
    · 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
    · TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
    · AI 智能体引爆开源社区「GitHub 热点速览」
    · 写一个简单的SQL生成工具
    点击右上角即可分享
    微信分享提示