当前位置: 首页 > 知识库问答 >
问题:

在 Java 中更改堆栈的顺序

吴丁雷
2023-03-14

我正在寻找一种方法来更改Java堆栈中元素的顺序,以便偶数在奇数下。

例如:5, 2, 6, 7, 1, 4, 3 它变成这个5, 7, 1, 3, 2, 6, 4。

以下是我目前的代码,我被困在寻找如何改变订单:

public static void main(String[] args) {

    Stack<Integer> p = new Stack<>();

    p.push(3);
    p.push(4);
    p.push(1);
    p.push(7);
    p.push(6);
    p.push(2);
    p.push(5);
    
    ListIterator<Integer> ListIterator = p.listIterator(p.size());  
     
    while (ListIterator.hasPrevious())   
    {  
    Integer i = ListIterator.previous();  
    System.out.println(i);  
    } 
    
}

谢谢你的帮助!

共有2个答案

况浩邈
2023-03-14

有很多方法可以完成你的任务。

我怀疑这个挑战的目的是熟悉堆栈数据结构及其基本操作。这是一个有两个加法堆栈的解决方案。

Stack<Integer> numbers = new Stack<>();
        
numbers.push(3);
numbers.push(4);
numbers.push(1);
numbers.push(7);
numbers.push(6);
numbers.push(2);
numbers.push(5);
        
Stack<Integer> odd = new Stack<>();
Stack<Integer> even = new Stack<>();
        
while (!numbers.isEmpty()) {
    Integer next = numbers.pop();
    if (next % 2 == 0) even.push(next);
    else odd.push(next);
}
        
numbers.addAll(odd);
numbers.addAll(even);
    
System.out.println(numbers);

输出:

[5, 7, 1, 3, 2, 6, 4]
佴保臣
2023-03-14

StackAbstractList的子类,因此您可以通过提供自定义比较器来使用List.sort()。

public class Temp {

    public static void main(String[] args) {
        Stack<Integer> p = new Stack<>();

        p.push(3);
        p.push(4);
        p.push(1);
        p.push(7);
        p.push(6);
        p.push(2);
        p.push(5);

        p.sort((a, b) -> {
            if (a % 2 == 0 && b % 2 == 0) {
                return 0;
            }
            if (a % 2 == 0) {
                return 1;
            }
            if (b % 2 == 0) {
                return -1;
            }
            return 0;
        });
        System.out.println(p);
    }
}

对于-[3,4,1,7,6,2,5]的初始堆栈,这会导致-[3,1,7,5,4,6,2]

 类似资料:
  • 我来自C/C++背景,在这里一个进程内存分为: null 我想把我的注意力集中在这一点上,当我阅读JVM中的堆和堆栈时,我们是在谈论堆栈和堆的概念吗?并且整个JVM的实际内存驻留在堆上(这里指的是堆的C++概念)?

  • 谁能给我举个例子吗, 如果您想在自己的代码中使用堆栈类,则需要在创建时完全指定包或更改类的名称;否则,您可能会与java.util.package中的堆栈发生冲突 它来自于“用java思考”……我尝试了一个与java冲突的例子。具有自己的堆栈类的util堆栈类。一切都很好。谁能给我举个碰撞的例子吗。

  • 在这个程序中,我必须打开一个文件并将其打印到文本区域,然后确保所有括号、括号等匹配。如果括号匹配,我将在另一个文本区域中打印出来。我的问题如下:我是从文件中读取还是从第一个文本区域读取?我是在Actionlistener还是在构造函数中创建堆栈?

  • 问题内容: 在使用以下方式部署此撰写文件的堆栈时: 生成的服务名称将为 myapp_service-name 我希望它由 my-custom-service-name 命名和引用 __ 问题答案: 对于服务之间的通信,如果两个服务都在同一网络中,则可以使用在撰写文件中定义的serviceName(在您的情况下,您的服务名称为service-name)。 完成后,堆栈名称将显示在每个服务之前。这样做

  • 问题内容: 我对Java不太了解。 我浏览了几个链接,发现博客上写着“ Java Primitives存储在堆栈上”,我觉得这取决于实例变量或局部变量。 经过几个链接后,我的结论是, 类变量(基元)作为对象包含的对象的一部分存储在堆中。 类变量– object(用户定义)–作为其包含的Object的一部分存储在堆中。对于参考对象和实际对象都是如此。 方法变量-基元-作为该堆栈框架的一部分存储在堆栈

  • 问题内容: 有谁知道是否有一种方法可以动态地(运行时)增加主线程的堆栈大小?另外,我相信这是同样的问题,是否可以在实例化之后增加/更新a的堆栈大小? 的CTOR允许定义其堆栈大小,但是我找不到任何更新方法。实际上,我没有在JDK中找到对堆栈大小的任何管理(这往往表明这是不可能的),一切都在VM中完成。 根据Java语言规范,可以在“创建堆栈时”设置堆栈大小,但需要注意以下几点: Java虚拟机实现