?
Solved

Priority Queue with Singly Linked List

Posted on 2006-05-01
33
Medium Priority
?
3,311 Views
Last Modified: 2013-12-14
Good Morning,

I'm trying to write a priority queue that uses a singly linked list. This is a my first time writting this , I've written a priority queue using heaps but it's C++. Please bear with me on careless mistakes. Could anyone offer some insights on my errors ? and my priority queue coding ? I haven't got a chance to run the test drivers on it yet. I'm very sure I've implemented dequeue wrong , if anyone can be so kind to look at it , I'll appreciate it.

Thanks


--ERRORS---
symbol  : method compareTo(java.lang.Object)
location: class java.lang.Object
        if((front.data.compareTo(head.data)) > 0)

symbol  : method compareTo(java.lang.Object)
location: class java.lang.Object
            if((back.data.compareTo(head.data)) > 0)

found   : java.lang.Object
required: java.lang.Comparable
          Comparable key = head.data;



-------SOURCE CODE-----------------------

import java.lang.Comparable;
import java.util.*;


public class PriorityQueue implements PriorityQueueInterface {
   
   
   private class Node
   {
     Object data;
     Node next;
   }

// Instance variables
   private Node front,back;
   private Node head = new Node();
   private Node tail = new Node();

// Constructor

   public PriorityQueue()
   {
      this.head = null;
      this.tail= null;    
   }

// Returns whether the queue is empty

   public boolean isEmpty()
   {
      return head == null;
   }

// Returns whether the queue is full

   public boolean isFull()
   {
      return false;
   }

// Inserts the specified object at the back of the queue

   public void enqueue(Comparable key)
   {
     
     
        if (head == null || key.compareTo(head.data) > 0)
        {
          head.data = key;
        return;
             }
     
      Node front = head;
        back = front.next;
       
        if((front.data.compareTo(head.data)) > 0)
        {
        {
            head.next = back;
            head = front;
            return;
        }
       
        while(back != null)
        {
            if((back.data.compareTo(head.data)) > 0)
            {
                back.next = front;
                head.next = back;
                return;
            }
            front = back;
            back = front.next;
           
        }
       
        front.next = head;
        }
   }

   
       
// Removes the object at the front of the queue and returns it

   public Comparable dequeue()
   {
      if (isEmpty())
         throw new EmptyQueue();
     
      if (!isEmpty())
      {
          Comparable key = head.data;
          return key;
         
      }
     
   }
   

}
0
Comment
Question by:andrew79
  • 15
  • 9
  • 7
  • +1
33 Comments
 
LVL 92

Assisted Solution

by:objects
objects earned 1000 total points
ID: 16582785
>      Object data;

make data Comparable

     Comparable data;


0
 

Author Comment

by:andrew79
ID: 16583075
Thanks object for the quick reply. As I compiled my program package, I have new errors. Any suggestions ?

The following is my driver and date class. This program is meant to sort dates that it reads from a file. Two new errors pop up

1 )PriorityQueue.java uses unchecked or unsafe operations.

2 )SortDate.java:28: enqueue(java.lang.Comparable) in package4.PriorityQueue cannot be applied to (package4.Date)






import java.io.*;
import java.util.*;

public class Date implements InOutputable
{


   private int day,month,year;
   private String monthString;

// Default constructor

   public Date()
   {
      this.day =0;
      this.month=0;
      this.year=0;
   }

// Returns whether two dates are the same

   public boolean equals(InOutputable other)
   {
      if (!(other instanceof Date))
          return false;
      else
      {
           Date otherDate = (Date) other;
           return(this.day == otherDate.day &&
           this.month == otherDate.month &&
                this.year == otherDate.year);
       }    
   }

// Compares two dates

    public int compareTo(InOutputable other)
    {
        Date otherDate = (Date)other;
     
        if ( year != otherDate.year )
            return year-otherDate.year;
        if ( month != otherDate.month )
            return month-otherDate.month;
        return day-otherDate.day;
    }


// Reads in a name from the supplied reader; parses it
//   into month , day , year

   public void input(BufferedReader reader)
      throws IOException
   {
      String dateInput = reader.readLine();
     
      StringTokenizer tokenizer = new StringTokenizer(dateInput,"/",true);
      if (dateInput == null)
         return;
     
      while(tokenizer.hasMoreTokens());
      {
          int token;
          token = Integer.parseInt(tokenizer.nextToken());
          month = token;
          token = Integer.parseInt(tokenizer.nextToken());
          day = token;
          token = Integer.parseInt(tokenizer.nextToken());
          year = token;
      }

   }

// Outputs the dates

   public void output(PrintStream writer)
   {
          writer.println(toString());
   }

// Converts a date to string
 
    public String toString()
   {  
      monthString = monthConverter(month);
      return monthString + "/" + day + "/" + year;
   }

// Checks whether object is null
//   Used to check for end of file

   public boolean isNull()
   {
      if(day < 0 || month < 0 || year < 0)
        return true;
      return false;
   }
   
   public String monthConverter(int month)
   {
       switch(month)
       {
           case 1:
               monthString = "Jan";
               break;
           case 2:
               monthString = "Feb";
               break;
           case 3:
               monthString = "Mar";
               break;
           case 4:
               monthString = "Apr";
               break;
           case 5:
               monthString = "May";
               break;
           case 6:
               monthString = "Jun";
               break;
           case 7:
               monthString = "Jul";
               break;
           case 8:
               monthString = "Aug";
               break;
           case 9:
               monthString = "Sep";
               break;
           case 10:
               monthString = "Oct";
               break;
           case 11:
               monthString = "Nov";
               break;
           case 12:
               monthString = "Dec";
               break;
           default:
               break;
       }
       
       return monthString;
   }
   
}



----------------------------------------------------------------

import java.io.*;

class SortDate
{

// Reads in names from a file and enqueues them onto a priority
//    queue and then dequeues them and displays them on the
//    screen

   public static void main(String[] args) throws IOException
   {
      Date date = new Date();
      PriorityQueue queue = new PriorityQueue();
      BufferedReader reader = new BufferedReader
         (new FileReader("TD4.txt"));

      date.input(reader);
      while (!date.isNull())
      {
         queue.enqueue(date); <--------------------- ERROR
         date = new Date();
         date.input(reader);
      }
      System.out.println("The date in descending order are:");
      while (!queue.isEmpty())
      {
         date = (Date)queue.dequeue();  
         date.output(System.out);
      }
   }
}
0
 
LVL 92

Expert Comment

by:objects
ID: 16583099
> 1 )PriorityQueue.java uses unchecked or unsafe operations.

justa warning, you can ignore it

> 2 )SortDate.java:28: enqueue(java.lang.Comparable) in package4.PriorityQueue cannot be applied to (package4.Date)

you need to make Date class implement Comparable
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
LVL 3

Accepted Solution

by:
arun_kuttz earned 1000 total points
ID: 16583100
Aparts from objects comment...

1. in the constructor --> u have nullified head and tail, that too after u have assigned new Node() to both of them on object creation (Not a bug.. but y simply create 2 objects and then set the ref to null in the constructor ?)

2. in the enqueue() method ..

  if (head == null || key.compareTo(head.data) > 0)
        {
          head.data = key;
       return;
            }

might result in a NullPointerException if head == null

3. in enqueue()..

 Node front = head;
        back = front.next;

if((front.data.compareTo(head.data)) > 0)
        {
          ...

the if condition will never be true cuz right before that, u have assigned front = head, so the compareTo() will always be 0.

4. I think enqueue() could be better written as follows (Assumes that head and tail are null initially):

public void enqueue(Comparable key)
   {    
// check for null key
        if (key == null) return;

// Case where queue is empty
        if (head == null)
        {
          head = new Node();
          head.data = key;
          return;
         }

// Case where key is greated than head data
        if (key.compareTo(head.data) > 0)
        {
          Node temp = head;
          head = new Node();
          head.data = key;
// if head was the only element earlier
// u have to set the tail
          if (temp.next == null)
          {
            tail = temp;
          }
          head.next = temp;
          return;
        }

// if only single element in queue.. and key < head.data
       if (tail == null)
       {
         tail = new Node();
         tail.data = key;
         head.next = tail;
         return;
       }      
     
// Iterate over queue and put key in its place
      Node temp = head;
      while (temp.next != null)
      {
         if (key.compareTo(temp.next.data) > 0)
         {
            Node t = new Node();
            t.data = key;
            t.next = temp.next;
            temp.next = t;
            return;
         }
         temp = temp.next;
       }

// if the function hasnt returned as yet, it means
// we need a new tail
      temp = new Node();
      temp.data = k;
      tail.next = temp;
      tail = temp;
       
   }


5. The dequeue method()...

 public Comparable dequeue()
   {
      if (isEmpty())
         throw new EmptyQueue();
     
//  you do not need this if check  ----->     if (!isEmpty())
//      {

          Comparable key = head.data;

// you must remove the head element
          head = head.next;

          return key;
         
//      }
     
   }

i hope this helped...

-KuTtZ
0
 

Author Comment

by:andrew79
ID: 16583261
I've made changes to the code as KuTtz had suggested . Everything compiles fine but when I run the program. It halted my computer. LOL. After restart I debugged it and it stops at the following

date.java

public void input(BufferedReader reader)
      throws IOException
   {
      String dateInput = reader.readLine();  <-------------------------------DEBUGGER STOPS HERE
     
      StringTokenizer tokenizer = new StringTokenizer(dateInput,"/",true);
      if (dateInput == null)
         return;
     
      while(tokenizer.hasMoreTokens());
      {
          int token;
          token = Integer.parseInt(tokenizer.nextToken());
          month = token;
          token = Integer.parseInt(tokenizer.nextToken());
          day = token;
          token = Integer.parseInt(tokenizer.nextToken());
          year = token;
      }


Any comment ??
0
 

Author Comment

by:andrew79
ID: 16583265
Another question .... Can I later increase the points for this ? Kuttz and Object thanks a million for your help.
0
 
LVL 92

Expert Comment

by:objects
ID: 16583348
>       String dateInput = reader.readLine();  <-------------------------------DEBUGGER STOPS HERE

strange. can you post where you call input()

> Another question .... Can I later increase the points for this ?

u can increase the points for a question, but 500 is the max for a single question.
0
 
LVL 3

Expert Comment

by:arun_kuttz
ID: 16583363
in your main method of SortDate...

Date date = new Date();
      PriorityQueue queue = new PriorityQueue();
      BufferedReader reader = new BufferedReader
         (new FileReader("TD4.txt"));

.. make sure "TD4.txt" is in the directory in which uve launched the java processes...
better yet, try giving an absolute path..

-KuTtZ
0
 

Author Comment

by:andrew79
ID: 16583369
Yeah I never had my netbeans shutting down my whole system. My computer pretty much froze and doesnt want to go on. Anyway this is where I called the input()


import java.io.*;
import java.util.*;

class SortDate
{

    private static String fileName;
    private static File srcFile;
// Reads in names from a file and enqueues them onto a priority
//    queue and then dequeues them and displays them on the
//    screen

   public static void main(String[] args) throws IOException
   {
      Date date = new Date();
      PriorityQueue queue = new PriorityQueue();
      BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
      boolean repeat = false;
      do
      {
          System.out.println("Enter the filename :");
          srcFile = new File(stdin.readLine());
          if (!srcFile.exists())
          {
              System.out.println("ERROR : File not Found !!");
              repeat = true;
          }
          else
              repeat = false;
      }
      while (repeat);  

      date.input(stdin);      <----------------------INPUT IS CALLED HERE
      while (!date.isNull())
      {
         queue.enqueue(date);
         date = new Date();
         date.input(stdin);
      }
      System.out.println("The date in descending order are:");
      while (!queue.isEmpty())
      {
         date = (Date)queue.dequeue();
         date.output(System.out);
      }
   }
}

0
 
LVL 3

Expert Comment

by:arun_kuttz
ID: 16583388
you should replace

date.input(stdin);

with

date.input(new FileReader(stdlin));

-KuTtZ

0
 
LVL 3

Expert Comment

by:arun_kuttz
ID: 16583395
or better yet, with..

date.input(new FileReader(srcFile));

-KuTtZ
0
 
LVL 92

Expert Comment

by:objects
ID: 16583404
Its waiting for you to type input as you passed it stdin :)
0
 

Author Comment

by:andrew79
ID: 16583413
Tried both methods. Returning the same thing. Should I changed everything to FileReadeR ?



ERROR
\SortDate.java:46: input(java.io.BufferedReader) in project4.Date cannot be applied to (java.io.FileReader)
0
 
LVL 30

Expert Comment

by:Mayank S
ID: 16583453
>> date.input(new FileReader(srcFile));

Instead of that, you can create a BufferedReader over the FileReader and then pass it:

date.input ( new BufferedReader ( new FileReader ( srcFile ) ) ) ;

Make sure you close everything in finally blocks (maintain references to the readers).
0
 
LVL 3

Expert Comment

by:arun_kuttz
ID: 16583470
sorry..

i forgot FileReader doesnt have a readLine(), yeah like mayankeagle said, BufferedReader should work

-KuTtZ
0
 

Author Comment

by:andrew79
ID: 16583513
Okay , its reading in the file , but I think there's somethign wrong with the priority queue. There is no output. I'll run debug and see what's going on.
0
 

Author Comment

by:andrew79
ID: 16583546
Lol infinite loop. Cant' figure out where yet. I'm going to repost all of my source code. Just so that it will show current version of the source code.




import java.io.*;
import java.util.*;

public class Date implements InOutputable, Comparable
{


   private int day,month,year;
   private String monthString;

// Default constructor

   public Date()
   {
      this.day =0;
      this.month=0;
      this.year=0;
   }

// Returns whether two dates are the same

   public boolean equals(InOutputable other)
   {
      if (!(other instanceof Date))
          return false;
      else
      {
           Date otherDate = (Date) other;
           return(this.day == otherDate.day &&
           this.month == otherDate.month &&
                this.year == otherDate.year);
       }    
   }

// Compares two dates

    public int compareTo(Object other)
    {
        Date otherDate = (Date)other;
     
        if ( year != otherDate.year )
            return year-otherDate.year;
        if ( month != otherDate.month )
            return month-otherDate.month;
        return day-otherDate.day;
    }


// Reads in a name from the supplied reader; parses it
//   into month , day , year

   public void input(BufferedReader reader)
      throws IOException
   {
       Scanner scanner = new Scanner(System.in);
      String dateInput = reader.readLine();
      if (dateInput == null)
         return;
     
      StringTokenizer tokenizer = new StringTokenizer(dateInput,"/");
   
          int token;
          token = Integer.parseInt(tokenizer.nextToken());
          month = token;
          token = Integer.parseInt(tokenizer.nextToken());
          day = token;
          token = Integer.parseInt(tokenizer.nextToken());
          year = token;

   }

// Outputs the dates

   public void output(PrintStream writer)
   {
          writer.println(toString());
   }

// Converts a date to string
 
    public String toString()
   {  
      monthString = monthConverter(month);
      return monthString + "/" + day + "/" + year;
   }

// Checks whether object is null
//   Used to check for end of file

   public boolean isNull()
   {
      if(day < 0 || month < 0 || year < 0)
        return true;
      return false;
   }
   
   public String monthConverter(int month)
   {
       switch(month)
       {
           case 1:
               monthString = "Jan";
               break;
           case 2:
               monthString = "Feb";
               break;
           case 3:
               monthString = "Mar";
               break;
           case 4:
               monthString = "Apr";
               break;
           case 5:
               monthString = "May";
               break;
           case 6:
               monthString = "Jun";
               break;
           case 7:
               monthString = "Jul";
               break;
           case 8:
               monthString = "Aug";
               break;
           case 9:
               monthString = "Sep";
               break;
           case 10:
               monthString = "Oct";
               break;
           case 11:
               monthString = "Nov";
               break;
           case 12:
               monthString = "Dec";
               break;
           default:
               break;
       }
       
       return monthString;
   }
   
}



import java.io.*;
import java.util.*;

class SortDate
{

    private static String fileName;
    private static File srcFile;
// Reads in names from a file and enqueues them onto a priority
//    queue and then dequeues them and displays them on the
//    screen

   public static void main(String[] args) throws IOException
   {
      Date date = new Date();
      PriorityQueue queue = new PriorityQueue();
      BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
      boolean repeat = false;
      do
      {
          System.out.println("Enter the filename :");
          srcFile = new File(stdin.readLine());
          if (!srcFile.exists())
          {
              System.out.println("ERROR : File not Found !!");
              repeat = true;
          }
          else
              repeat = false;
      }
      while (repeat);  

      date.input ( new BufferedReader ( new FileReader ( srcFile ) ) ) ;
      while (!date.isNull())
      {
         queue.enqueue(date);
         date = new Date();
         date.input ( new BufferedReader ( new FileReader ( srcFile ) ) ) ;
      }
      System.out.println("The date in descending order are:");
      while (!queue.isEmpty())
      {
         date = (Date)queue.dequeue();
         date.output(System.out);
      }
   }
}





import java.lang.Comparable;
import java.util.*;


public class PriorityQueue implements PriorityQueueInterface {
   
   
   private class Node
   {
     Comparable data;
     Node next;
   }

// Instance variables
   private Node front,back;
   private Node head = new Node();
   private Node tail = new Node();

// Constructor

   public PriorityQueue()
   {
      this.head = null;
      this.tail= null;    
   }

// Returns whether the queue is empty

   public boolean isEmpty()
   {
      return head == null;
   }

// Returns whether the queue is full

   public boolean isFull()
   {
      return false;
   }


   public void enqueue(Comparable key)
   {    
// check for null key
        if (key == null) return;

// Case where queue is empty
        if (head == null)
        {
          head = new Node();
          head.data = key;
          return;
         }

// Case where key is greated than head data
        if (key.compareTo(head.data) > 0)
        {
          Node temp = head;
          head = new Node();
          head.data = key;
// if head was the only element earlier
// u have to set the tail
          if (temp.next == null)
          {
            tail = temp;
          }
          head.next = temp;
          return;
        }

// if only single element in queue.. and key < head.data
       if (tail == null)
       {
         tail = new Node();
         tail.data = key;
         head.next = tail;
         return;
       }      
     
// Iterate over queue and put key in its place
      Node temp = head;
      while (temp.next != null)
      {
         if (key.compareTo(temp.next.data) > 0)
         {
            Node t = new Node();
            t.data = key;
            t.next = temp.next;
            temp.next = t;
            return;
         }
         temp = temp.next;
       }

// if the function hasnt returned as yet, it means
// we need a new tail
      temp = new Node();
      temp.data = key;
      tail.next = temp;
      tail = temp;
       
   }
   
   
   
   
       
// Removes the object at the front of the queue and returns it

   public Comparable dequeue()
   {
      if (isEmpty())
         throw new EmptyQueue();
     
          Comparable key = head.data;
          head = head.next;
          return key;  
     
   }
   

}


0
 
LVL 30

Expert Comment

by:Mayank S
ID: 16583560
What output do you see? Do you get anything on the console?
0
 

Author Comment

by:andrew79
ID: 16583571
Nothing. It's not even giving me any form of output
0
 

Author Comment

by:andrew79
ID: 16583594
Okay I'm not really experienced in using the debugger but it seems like the date.compareTO method is constantly being callled and so does the priorityQueue.enqueue method and it's a endless cycle between the both of them.
0
 

Author Comment

by:andrew79
ID: 16583626
Okay I've been observing it for awhile. It looks like the data on the file is never fully read. It reads in the first date and then calls date.compareTo and then back priorityQueue.enqueue and then it's endless cycle then. I have also notice the second date on the file is never read in.
0
 
LVL 92

Expert Comment

by:objects
ID: 16583632
change your read loop to:

      BufferedReader in = new BufferedReader ( new FileReader ( srcFile ) ) ;
      date.input ( in) ;
      while (!date.isNull())
      {
         queue.enqueue(date);
         date = new Date();
         date.input ( in) ;
      }


you were re-opening the file every loop
0
 
LVL 3

Expert Comment

by:arun_kuttz
ID: 16583675
actually even that wont work.... as the isNull() method check if day, month and year are < 0
so... i guess u have to also change the date constructor to

public Date()
   {
      this.day =-1;
      this.month=-1;
      this.year=-1;
   }

-KuTtZ
0
 

Author Comment

by:andrew79
ID: 16583773
Okay I did both of the changes. This time it's worst , right after I enter the file name. My whole system became unstable. LOL. I'm going to run debugger and see what's going on again
0
 
LVL 3

Expert Comment

by:arun_kuttz
ID: 16583794
try giving the filename directly and set srcFile explicitly inside the code... like so

      Date date = new Date();
      PriorityQueue queue = new PriorityQueue();
//      BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
//      boolean repeat = false;
//      do
//      {
//          System.out.println("Enter the filename :");
//          srcFile = new File(stdin.readLine());
//          if (!srcFile.exists())
//          {
//              System.out.println("ERROR : File not Found !!");
//              repeat = true;
//          }
//          else
//              repeat = false;
//      }
//      while (repeat);
       srcFile = new File("C:\\Dates.txt"); <----- set srcFile to the name of the File (Full pathname...)
       BufferedReader in = new BufferedReader ( new FileReader ( srcFile ) );

      date.input ( in ) ;

-KuTtZ


0
 

Author Comment

by:andrew79
ID: 16583847
I didn't hard code the the file path but it's still running on an endless loop. It looks like it's reading dates from the file properly , but it just keeps going on to priorityQueue.enqueue() and date.compareTo(). I've been running the debugger for 15 min. You would think it will be done lol. Wonder what's the Big-O on this
0
 
LVL 92

Expert Comment

by:objects
ID: 16583865
you don't set the tail when you add first node to list
0
 

Author Comment

by:andrew79
ID: 16583890
I'm lost. What should I remove from enqueue ?

   public void enqueue(Comparable key)
   {    
// check for null key
        if (key == null) return;

// Case where queue is empty
        if (head == null)
        {
          head = new Node();
          head.data = key;
          return;
         }

// Case where key is greated than head data
        if (key.compareTo(head.data) > 0)
        {
          Node temp = head;
          head = new Node();
          head.data = key;
// if head was the only element earlier
// u have to set the tail
          if (temp.next == null)
          {
            tail = temp;
          }
          head.next = temp;
          return;
        }

// if only single element in queue.. and key < head.data
       if (tail == null)
       {
         tail = new Node();
         tail.data = key;
         head.next = tail;
         return;
       }      
     
// Iterate over queue and put key in its place
      Node temp = head;
      while (temp.next != null)
      {
         if (key.compareTo(temp.next.data) > 0)
         {
            Node t = new Node();
            t.data = key;
            t.next = temp.next;
            temp.next = t;
            return;
         }
         temp = temp.next;
       }

// if the function hasnt returned as yet, it means
// we need a new tail
      temp = new Node();
      temp.data = key;
      tail.next = temp;
      tail = temp;
       
   }
0
 
LVL 92

Expert Comment

by:objects
ID: 16583899
No remove, you need to set tail

        if (head == null)
        {
          head = new Node();
          head.data = key;
          tail = head;
          return;
         }

though why do u need a tail anyway
0
 
LVL 3

Expert Comment

by:arun_kuttz
ID: 16583929
u sure u set the day, month and year to -1 by default ??... i copy pasted ur code into my IDE... it seems to work fine here..

-KuTtZ
0
 

Author Comment

by:andrew79
ID: 16583946
LOL

I'm an idiot. I set it to 1. Sorry it's 4am and I've been up for the last 23 hrs.I didn't see the -1 earlier. I work as a tech support and goto classes at night. It worked. No more endless LOOP !!

Thanks a million kuttz and objects
0
 
LVL 3

Expert Comment

by:arun_kuttz
ID: 16583948
like objects noticed... u dont really need tail in this case... but it would be usefull if we had a check like

if (key.compareTo(tail.data) <= 0)
        {
          Node temp = new Node();
          temp.data = key;
          tail.next = temp;
          return;
        }

basically for large queues, u could use this check before iterating over the whole things.

-KuTtZ
0
 

Author Comment

by:andrew79
ID: 16583992


Noted. Thanks a lot for your time guys. I really appreciate it. Wish there werent a cap on points, but I guess that makes the whole point system much more worthwhile.

Cheers,
Andrew
0

Featured Post

Vote for the Most Valuable Expert

It’s time to recognize experts that go above and beyond with helpful solutions and engagement on site. Choose from the top experts in the Hall of Fame or on the right rail of your favorite topic page. Look for the blue “Nominate” button on their profile to vote.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.
How to fix incompatible JVM issue while installing Eclipse While installing Eclipse in windows, got one error like above and unable to proceed with the installation. This video describes how to successfully install Eclipse. How to solve incompa…
Suggested Courses
Course of the Month14 days, 16 hours left to enroll

839 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question