Reference data types in Java - Time & Space Complexity
When working with reference data types in Java, it's important to see how operations on them grow as data size increases.
We want to know how the time needed changes when we use objects and their references.
Analyze the time complexity of the following code snippet.
class Box {
int value;
Box next;
}
void traverse(Box start) {
Box current = start;
while (current != null) {
System.out.println(current.value);
current = current.next;
}
}
This code walks through a linked list made of Box objects, printing each value.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The while loop that visits each Box object once.
- How many times: Once for every Box in the linked list.
As the number of Box objects grows, the loop runs more times, directly matching the list size.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 visits to Box objects |
| 100 | About 100 visits |
| 1000 | About 1000 visits |
Pattern observation: The work grows evenly as the list gets longer.
Time Complexity: O(n)
This means the time to finish grows in a straight line with the number of objects.
[X] Wrong: "Accessing objects through references is instant and does not add time."
[OK] Correct: Each step to the next object still takes time, so visiting more objects means more time.
Understanding how time grows when working with objects and references helps you explain how programs handle data step-by-step.
"What if we changed the linked list to a tree structure? How would the time complexity change?"
Practice
Which of the following is a reference data type in Java?
int, double, String, booleanSolution
Step 1: Identify primitive vs reference types
int, double, and boolean are primitive types storing actual values.Step 2: Recognize String as a reference type
String stores a reference to an object containing text data.Final Answer:
String -> Option AQuick Check:
Reference type = String [OK]
- Confusing String as primitive
- Thinking int is a reference type
- Assuming all data types are reference types
Which of the following is the correct way to create a new String object in Java?
?
Solution
Step 1: Check correct constructor syntax
Use 'new' keyword with class name and parentheses: new String("hello")Step 2: Verify case sensitivity and brackets
Class names are case-sensitive (String, not string), and arrays use [] differently.Final Answer:
String s = new String("hello"); -> Option BQuick Check:
Correct object creation syntax = String s = new String("hello"); [OK]
- Using lowercase 'string' instead of 'String'
- Missing 'new' keyword
- Using array brackets [] incorrectly
What will be the output of the following code?
String a = "hello"; String b = a; b = b + " world"; System.out.println(a);
Solution
Step 1: Understand reference assignment
Variable b initially points to the same String object as a ("hello").Step 2: String concatenation creates new object
b = b + " world" creates a new String object; a still points to original "hello".Final Answer:
hello -> Option CQuick Check:
Strings are immutable; original stays same [OK]
- Assuming b changes a's value
- Thinking references share mutable data
- Expecting combined string in a
Find the error in the following code snippet:
String[] arr = new String[3]; arr[0] = "Java"; arr[1] = "Python"; arr[3] = "C++";
Solution
Step 1: Check array size and indices
Array size is 3, valid indices are 0, 1, 2.Step 2: Identify invalid index usage
arr[3] accesses index 3 which is outside valid range, causing runtime error.Final Answer:
Array index out of bounds error -> Option DQuick Check:
Array indices start at 0, max index = size-1 [OK]
- Using index equal to array length
- Confusing syntax error with runtime error
- Assuming arrays auto-expand
Given the class below, what will be the output?
class Box {
int length;
Box(int length) { this.length = length; }
}
public class Test {
public static void main(String[] args) {
Box b1 = new Box(5);
Box b2 = b1;
b2.length = 10;
System.out.println(b1.length);
}
}Solution
Step 1: Understand reference assignment for objects
b2 is assigned the reference of b1, so both point to the same Box object.Step 2: Modify object property via one reference
Changing b2.length to 10 changes the single Box object's length property.Step 3: Print property via original reference
Printing b1.length shows 10 because b1 and b2 refer to the same object.Final Answer:
10 -> Option AQuick Check:
Object references share same data; change reflects everywhere [OK]
- Thinking b1 and b2 are separate objects
- Expecting original value after change
- Confusing primitives with objects
Ready to prove it?
Pass the test and this pattern moves unknown
