public void populateQueueFromDB() {
// create priority queue
try {
String url = "jdbc:mysql://localhost:3306/project";
Connection conn = DriverManager.getConnection(url, "root", "nbuser");
PreparedStatement stmt = conn.prepareStatement("SELECT user_id,s_date,e_date,d_date,department,projectname,projectapplication,priority,cores,disk_space,analysis FROM booking");
ResultSet rs;
rs = stmt.executeQuery();
//List<JobRequest> jobList = new ArrayList<JobRequest>();
while (rs.next()) {
JobRequest job = new JobRequest();
User user = new User();
user.setUserID(rs.getString("user_id"));
job.setUserID(user.getUserID()); // changes the /user id to the job.setuser id so can call for my queue print.
job.setStartDate(rs.getString("s_date"));
job.setEndDate(rs.getString("e_date"));
job.setDeadDate(rs.getString("d_date"));
job.setDepartment(rs.getString("department"));
job.setProjectName(rs.getString("projectname"));
job.setProjectApplication(rs.getString("projectapplication"));
job.setPriority(rs.getInt("priority"));
job.setCores(rs.getInt("cores"));
job.setDiskSpace(rs.getInt("disk_space"));
job.setAnalysis(rs.getString("analysis"));
schedulerPriorityQueue.addJob(job);
}
schedulerPriorityQueue.printQueue();
conn.close();
} catch (Exception e) {
System.err.println("Got an exception! ");
System.err.println(e.getMessage());
}
}
에 모든 값을 추가 해요
1,2,3의 우선 순위에 따라 대기열을 정렬합니다. 다른 코드 이름 등의 비트하지만 본질적으로는 비교
public class JobQueueComparator implements Comparator<JobRequest> {
@Override
public int compare(JobRequest object1, JobRequest object2) {
if(object1.getPriority() < object2.getPriority()){
return 1;
} else {
return -1;
}
}
}
하지만 비교기에서지고있어 출력에 나를 보낸다 1 다음 2. 예에서이 적응 한, 우선 순위 3에 주문한다 온라인으로 보았지만 필자는 본 비교기 예제에 대한 수익을 이해하지 못합니다.
내 우선 순위를 정렬하려면 어떻게 비교기를 변경할 수 있습니까? 1 개가 가장 중요하고 3 개가 가장 적습니다. 모든 결과 세트를 배열에 추가 한 후 출력 결과를 출력하고 있는지 확인하여 순서가 바뀌었을 때 작동한다는 것을 알았습니다. 원하는 순서로 배열하는 방법을 모릅니다.
감사
편집 : schedulerPriorityQueue
public class Queue {
private Comparator<JobRequest> comparator = new JobQueueComparator(); //calls my comparator
private PriorityQueue< JobRequest> scheduledJobs = new PriorityQueue<JobRequest>(100, comparator);
public void addJob(JobRequest job) {
// now add job to priority queue
scheduledJobs.add(job); // add jobs from the resultset into queue
}
: 당신이 고려 사항으로이 같은 우선 순위를 가지고가는 경우에
이 일하는 것이'prio1
Danyel
우선 순위 필드가 int이므로 Integer 객체로 캐스팅하지 않고 compareTo 메소드 (Integer is Comparable)를 사용하는 것이 가장 좋은 이유는 무엇입니까? – cjstehno
당신은 당신의 콤퍼레이터가 어떻게 사용되는지를 보여주지 않습니다. 첫 번째 코드 블록은 질문의 문제로는 전혀 쓸모가 없습니다. 'schedulerPriorityQueue.addJob()'이 구현 된 방법을 보여주지는 않습니다. 아마 당신의 실수가있는 곳일 것입니다. 우리는 다른 어떤 곳에서 어떤 종류의 호출이라도 알지 못합니다 ... –