Java 按int变量对对象列表进行排序

Java 按int变量对对象列表进行排序,java,list,sorting,Java,List,Sorting,我有一个类(ClassOne),它有一个实例类(进程)的列表,我试图找出如何根据优先级int对它们进行排序 public class ClassOne { static List<Process> processList = new ArrayList<Process>(); public static void main(String[] args) { //hardcoded for example proce

我有一个类(ClassOne),它有一个实例类(进程)的列表,我试图找出如何根据优先级int对它们进行排序

public class ClassOne
{
    static List<Process> processList = new ArrayList<Process>();

    public static void main(String[] args)
    {
        //hardcoded for example
        processList.add(new Process(3));
        processList.add(new Process(1));
        processList.add(new Process(2));
        
        The processes are current not ordered in the List by priority, so I call insertion sort
    }

    //Im pretty sure this is changing their priority instead of where they are in the List, but i dont know how to change it
    public static void InsertionSort()
    {
        int n = processList.size(); 
        for (int i = 1; i < n; ++i) 
        { 
            int key = processList.get(i).priority; 
            int j = i - 1; 
 
            /* Move elements of processList.get(0..i-1]).priority, that are 
               greater than key, to one position ahead 
               of their current position */
            while (j >= 0 && processList.get(j).priority > key)
            {
                processList.get(j+1).priority = processList.get(j).priority; 
                j = j - 1; 
            } 
            processList.get(j + 1).priority = key; 
        }

}

public class Process
{
    int priority;
    public Process(int tempPriority)
    {
        priority = tempPriority;
    }
}
公共类一
{
静态列表processList=new ArrayList();
公共静态void main(字符串[]args)
{
//例如,硬编码
processList.add(新流程(3));
processList.add(新流程(1));
processList.add(新流程(2));
这些进程在列表中不是按优先级排序的,所以我称之为插入排序
}
//我很确定这会改变他们的优先级,而不是他们在列表中的位置,但我不知道如何改变它
公共静态void InsertionSort()
{
int n=processList.size();
对于(int i=1;i=0&&processList.get(j.priority>key)
{
processList.get(j+1).priority=processList.get(j).priority;
j=j-1;
} 
processList.get(j+1).priority=key;
}
}
公共类过程
{
int优先级;
公共进程(优先权)
{
优先级=临时优先级;
}
}
任何排序方法都有效,我想按照优先级对processList中的每个流程对象进行排序,从最小到最大

尝试第一个解决方案后的代码:

public static void InsertionSort()
    {
         System.out.println(processList.get(0).name);
         System.out.println(processList.get(1).name);
        int n = processList.size(); 
        for (int i = 1; i < n; ++i) 
        { 
            int key = processList.get(i).priority; 
            int j = i - 1; 
            //The method set(int, Process) in the type List<Process> is not applicable for the arguments (int, int)
            /* Move elements of processList.get(0..i-1]).priority, that are 
               greater than key, to one position ahead 
               of their current position */
            while (j >= 0 && processList.get(j).priority > key)
            {
                processList.set(j + 1, processList.get(j));
                j = j - 1; 
            } 
            processList.set(j + 1, processList.get(i));
            System.out.println("Queue Sorted");
            System.out.println(processList.get(0).name);
            System.out.println(processList.get(1).name);
            
        } 
公共静态void InsertionSort()
{
System.out.println(processList.get(0.name));
System.out.println(processList.get(1.name));
int n=processList.size();
对于(int i=1;i=0&&processList.get(j.priority>key)
{
processList.set(j+1,processList.get(j));
j=j-1;
} 
processList.set(j+1,processList.get(i));
System.out.println(“队列排序”);
System.out.println(processList.get(0.name));
System.out.println(processList.get(1.name));
} 
用于在索引处设置元素

processList.get(j+1).priority = processList.get(j).priority; 
变成

 processList.set(j+1, processList.get(j));
processList.set(j+1, processList.get(i));

变成

 processList.set(j+1, processList.get(j));
processList.set(j+1, processList.get(i));

使用java 8+可以尝试以下代码:

import java.util.*;
import java.util.stream.Collectors;
public static void InsertionSort()
{
    System.out.println(processList.get(0).name);
    System.out.println(processList.get(1).name);
    System.out.println(processList.get(2).name);
    
    processList=processList.stream()
    .sorted((o1,o2)->{return o1.priority-o2.priority;})
    .collect(Collectors.toList());
    
    System.out.println(processList.get(0).name);
    System.out.println(processList.get(1).name);
    System.out.println(processList.get(2).name);
}

你试过查看列表的排序方法吗?当我更改processList.get(j+1).priority=key;改为processList.set(j+1,key);我得到错误“类型列表中的方法集(int,Process)不适用于参数(int,int)”对不起。它一定是
processList.get(i)
和not
我给每个进程都指定了一个名称,以便查看其排序是否正确。如果我在列表中添加一个名为“a”的进程和另一个名为“B”的进程并运行插入排序,第一个输入将覆盖第二个输入。它将在顶部打印a,然后在顶部打印B,但在底部只打印两次a。(我将新的InsertionSort代码张贴在OP的底部)