Java 按int变量对对象列表进行排序
我有一个类(ClassOne),它有一个实例类(进程)的列表,我试图找出如何根据优先级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
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的底部)