Please use code tags next time
1) is the first statement in the while loop creating a second array, in our hq array?
Nope, it is creating a new HeapQuiz object and assigning it to the first slot of your "hq" array which is declared to hold HeapQuiz objects. The "hq[x]" part of the statement is just accessing the "x" index (in this case 0) of your hq array while the "= new HeapQuiz();" part of your statement is creating a new object of type HeapQuiz and is returning a refernence to this object into your array.
2) what is the statement hq[x].id = x actually doing (specifically the .id part)? I thought the . operator meant you were calling a method?
Yes, the .id is accessing the member variable named "id" that belongs to the HeapQuiz object. While it is true you can use the dot operator to access methods, you can also access member variables as long as they are visible in your program. What I mean by visible is you could not access "id" using the dot operator if "id" was declared private.
Hope that helps, and welcome to the JavaRanch!