先进后出java代码 java先进先出和后进先出

用java语言设计一个先进先先出的队列类

代码仅供参考,如有问题,欢迎追问!

10年积累的成都网站制作、做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站后付款的网站建设流程,更有民乐免费网站建设让你可以放心的选择与我们合作。

Basket:

import java.util.concurrent.BlockingQueue;

import java.util.concurrent.LinkedBlockingQueue;

/**

* 定义装苹果的篮子

* @author stone

* @version 2013-05-21

*/

public class Basket {

// 篮子,能够容纳Integer.MAX_VALUE个苹果

BlockingQueueObject basket = new LinkedBlockingQueueObject(Integer.MAX_VALUE);

// 生产苹果,放入篮子

public void produce(Object obj) throws InterruptedException {

// put方法放入一个苹果,若basket满了,等到basket有位置

basket.put(obj);

}

// 消费苹果,从篮子中取走

public Object consume() throws InterruptedException {

// take方法取出一个苹果,若basket为空,等到basket有苹果为止(获取并移除此队列的头部)

return basket.take();

}

}

BaksetTest:

import org.apache.log4j.Logger;

public class BaksetTest {

static Logger logger = Logger.getLogger(BaksetTest.class);

static Basket basket = new Basket();

public static void main(String[] args) throws Exception {

try{

Consume con = new Consume(basket);

Thread thread = new Thread(con);

thread.start();

Integer num = 0;

while(true){//循环放入数据到队列

num++;

basket.produce(num);

Thread.sleep(1*1000);

if(num1000000) num =0;

}

} catch( Exception e ){

logger.error("error : ", e);

}

}

}

//消费线程,用来消费队列里堆积数据,此线程为阻塞状态

class Consume implements Runnable {

Logger logger = Logger.getLogger(BaksetTest.class);

Basket basket;

public Consume (Basket basket){

this.basket = basket;

}

@Override

public void run() {

try{

while(true){//等待从队列取出数据

System.out.println("取出:" + basket.consume());

}

} catch ( Exception e ){

logger.error("error : ", e);

}

}

}

JAVA 方法的入栈出栈问题

你得明白栈的定义。代码执行的时候是执行一个方法,执行完,返回方法的上一个代码块继续往下执行后面的内容。这样的话是不是就是一个栈结构了?先进后出。方法一边执行,一边往栈里面存数据,等执行完了就取出数据(取出的是返回值,是最后一个存进去的 栈结构是后进先出),然后执行外面的代码。这么说你可能不明白,我给你举个例子。

int sub(int a,int b){

return a+b;

}

int c = sub(2,3);//注意执行这条语句的时候是不是执行了一个方法?

//那么语句执行的时候是要从左往右执行的对吧,但是事实的逻辑却是先算出来sub(2,3)这个方

//法的返回值,然后再把返回值(5)赋值给 c ,那么这个怎么实现,肯定是一个栈的数据结构,编译的时候先把”int c = “入栈,然后再把 sub(2,3),入栈,执行的时候,从栈里面取,取的第一个肯定是sub(2,3)吧?于是就计算出等于5,继续取,取出了int c =,然后就和5对接上了,就把值赋给c了。这只是一个小例子。

道理是这样,但是具体的存取可不是这样的哦。具体的存取应该分的非常细腻,应该是按照java语法的最小单位来往栈里存取的。说白了一句话,程序运行的时候的先后顺序是跟人大脑想问题的顺序一样的,但是代码不是按照这样的顺序写的(从左到右),于是就用栈结构来达到这样的效果。

这么说,明白了吗?

java如何用数组来模拟栈的先进后出

import java.util.Arrays;

public class StackTest {

public static void main(String[] args) {

Stack stack = new Stack();

stack.put(1);

stack.put(2);

stack.put(3);

stack.put(4);

stack.show();

System.out.println(stack.push());

System.out.println(stack.push());

System.out.println(stack.push());

System.out.println(stack.push());

}

}

class Stack{

private int index;

private int length = 3;

private int[] stack;

public Stack() {

stack= new int[length];

index = 0;

}

public void put(int i){

if(index = length -1){

stack[index++] = i;

} else {

System.out.println("Stack 已满");

}

}

public int push(){

if (index 0){

return stack[--index];

}else {

System.out.print("Stack 已空");

return -1;

}

}

public void show() {

System.out.println(Arrays.toString(stack));

}

}

Java 中 栈先进后出 有什么作用啊

分配内存,当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。


当前题目:先进后出java代码 java先进先出和后进先出
标题来源:http://scyanting.com/article/dojceho.html