The difference between a junior developer and a senior developer is often not just knowledge of design patterns or architecture — it is how fast they can translate ideas into code. IDE shortcuts are one of the biggest productivity multipliers available to you.
Consider this: every time you reach for the mouse to navigate a menu, find a file, or refactor a variable name, you lose 2-5 seconds. That does not sound like much, but a developer performs these actions hundreds of times per day. Over a year, those seconds add up to weeks of lost productivity.
Here is what changes when you master IDE shortcuts:
This tutorial covers shortcuts for the two most popular Java IDEs: Eclipse and IntelliJ IDEA. The shortcuts shown use Windows/Linux keybindings. On macOS, replace Ctrl with Cmd and Alt with Option unless noted otherwise.
Tip: Do not try to memorize all shortcuts at once. Pick 3-5 from this list, use them exclusively for a week until they become muscle memory, then add 3-5 more. Within a few months, you will be dramatically faster.
Navigation shortcuts let you jump to any part of the codebase instantly. These are the shortcuts you will use most frequently — master them first.
| Action | Eclipse | IntelliJ IDEA | Notes |
|---|---|---|---|
| Go to Class | Ctrl + Shift + T |
Ctrl + N |
Type any part of the class name. Supports CamelCase (e.g., “USC” finds UserServiceController) |
| Go to File / Resource | Ctrl + Shift + R |
Ctrl + Shift + N |
Opens any file — .xml, .properties, .html, .java, etc. |
| Go to Line Number | Ctrl + L |
Ctrl + G |
Jump to a specific line number in the current file |
| Go to Symbol / Method | Ctrl + O |
Ctrl + F12 |
Shows all methods and fields in the current class. Start typing to filter. |
| Go to Declaration | F3 or Ctrl + Click |
Ctrl + B or Ctrl + Click |
Jump to where a variable, method, or class is defined |
| Go to Implementation | Ctrl + T |
Ctrl + Alt + B |
From an interface method, jump to its implementations |
| Navigate Back | Alt + Left |
Ctrl + Alt + Left |
Go back to where you were before (like browser back button) |
| Navigate Forward | Alt + Right |
Ctrl + Alt + Right |
Undo a “navigate back” |
| Recent Files | Ctrl + E |
Ctrl + E |
Shows list of recently opened files (same in both IDEs) |
| Switch Between Tabs | Ctrl + Page Up / Down |
Alt + Left / Right |
Cycle through open editor tabs |
| Show Type Hierarchy | F4 |
Ctrl + H |
See the inheritance tree of a class |
| Search Everywhere | N/A | Double Shift |
IntelliJ-only: search classes, files, actions, settings — everything |
| Quick Open Type | Ctrl + Shift + T |
Ctrl + N |
Open any class by name, supports wildcard (*) patterns |
Pro tip: IntelliJ’s Double Shift (Search Everywhere) is arguably the single most powerful shortcut. It searches classes, files, methods, settings, actions, and even Git branches. If you only learn one IntelliJ shortcut, make it this one.
Pro tip: Eclipse’s Ctrl + Shift + T supports CamelCase shortcuts. Instead of typing “ApplicationContextConfiguration”, type “ACC” and it will find the class. This works in IntelliJ too with Ctrl + N.
These shortcuts make writing and rearranging code faster. Once you learn them, you will never manually copy/paste to move a line or type a comment prefix again.
| Action | Eclipse | IntelliJ IDEA | Notes |
|---|---|---|---|
| Duplicate Line | Ctrl + Alt + Down |
Ctrl + D |
Duplicates the current line or selected block below |
| Delete Line | Ctrl + D |
Ctrl + Y |
Deletes the entire current line (careful: same key, different action!) |
| Move Line Up | Alt + Up |
Alt + Shift + Up |
Moves the current line or selected block up |
| Move Line Down | Alt + Down |
Alt + Shift + Down |
Moves the current line or selected block down |
| Comment Line | Ctrl + / |
Ctrl + / |
Toggle // comment on current line or selection (same in both) |
| Block Comment | Ctrl + Shift + / |
Ctrl + Shift + / |
Wrap selection in /* */ block comment |
| Auto-Format Code | Ctrl + Shift + F |
Ctrl + Alt + L |
Reformats the entire file or selected code according to style rules |
| Auto-Import | Ctrl + Shift + O |
Ctrl + Alt + O |
Eclipse: organizes imports (adds missing, removes unused). IntelliJ: removes unused (auto-import adds on the fly) |
| Quick Fix / Suggestions | Ctrl + 1 |
Alt + Enter |
Shows context actions: create method, add import, fix error, etc. |
| Complete Code | Ctrl + Space |
Ctrl + Space |
Autocomplete methods, variables, types (same in both) |
| Smart Complete | N/A | Ctrl + Shift + Space |
IntelliJ-only: context-aware completion (filters by expected type) |
| Surround With | Alt + Shift + Z |
Ctrl + Alt + T |
Wrap selected code in try/catch, if/else, for loop, etc. |
| Select Word | Double-click |
Ctrl + W |
IntelliJ: expands selection progressively (word > statement > block > method > class) |
| Shrink Selection | N/A | Ctrl + Shift + W |
IntelliJ-only: reverse of Ctrl + W |
| Undo | Ctrl + Z |
Ctrl + Z |
Standard undo (same in both) |
| Redo | Ctrl + Y |
Ctrl + Shift + Z |
Note: Ctrl + Y in IntelliJ deletes a line, NOT redo! |
Warning: Notice that Ctrl + D does completely different things in Eclipse (delete line) versus IntelliJ (duplicate line). Similarly, Ctrl + Y is redo in Eclipse but delete line in IntelliJ. If you switch between IDEs, this will trip you up. IntelliJ offers an “Eclipse keymap” option (Settings > Keymap) that remaps IntelliJ shortcuts to match Eclipse, which can ease the transition.
Code generation shortcuts automatically create boilerplate code that would take minutes to write by hand. These are especially useful for Java, which requires a lot of boilerplate (constructors, getters/setters, equals, hashCode, toString).
| Action | Eclipse | IntelliJ IDEA | Notes |
|---|---|---|---|
| Generate Menu | Alt + Shift + S |
Alt + Insert |
Opens the generation menu with all options below |
| Generate Constructor | Alt + Shift + S then O |
Alt + Insert > Constructor |
Select which fields to include in the constructor |
| Generate Getters/Setters | Alt + Shift + S then R |
Alt + Insert > Getter and Setter |
Select fields to generate getters/setters for |
| Generate toString() | Alt + Shift + S then S |
Alt + Insert > toString() |
Creates a toString() method including selected fields |
| Generate equals() / hashCode() | Alt + Shift + S then H |
Alt + Insert > equals() and hashCode() |
Creates both methods based on selected fields |
| Override Methods | Alt + Shift + S then V |
Ctrl + O |
Override a method from a parent class |
| Implement Interface Methods | Alt + Shift + S then V |
Ctrl + I |
Implement abstract methods from an interface |
| Generate Delegate Methods | Alt + Shift + S then E |
Alt + Insert > Delegate Methods |
Delegate to a field (composition pattern) |
Here is an example of how quickly you can build a complete Java class using generation shortcuts:
// Step 1: Type the class with fields (the only part you type manually)
public class Employee {
private Long id;
private String firstName;
private String lastName;
private String email;
private double salary;
}
// Step 2: Place cursor inside the class body
// Press Alt + Insert (IntelliJ) or Alt + Shift + S (Eclipse)
// Select "Constructor" > choose all fields > OK
// Result: Constructor generated automatically
// Step 3: Press Alt + Insert again > select "Getter and Setter" > select all fields
// Result: 10 methods generated (5 getters + 5 setters)
// Step 4: Press Alt + Insert > "toString()" > select all fields
// Result: toString() generated
// Step 5: Press Alt + Insert > "equals() and hashCode()" > select id and email
// Result: Both methods generated
// Total time: ~15 seconds for a complete domain class
// Without shortcuts: 5-10 minutes of typing
Modern alternative: If you are on Java 16+, consider using records instead. A record auto-generates the constructor, getters, equals, hashCode, and toString in a single line:
// Java 16+ record -- replaces all the generated boilerplate above
public record Employee(Long id, String firstName, String lastName, String email, double salary) {}
// Constructor, getters (id(), firstName(), etc.), equals(), hashCode(), toString()
// are ALL auto-generated by the compiler
Refactoring shortcuts are what separate IDE users from text editor users. These shortcuts let you safely restructure code without manually finding and replacing text across files — the IDE understands Java syntax and only changes the correct references.
| Action | Eclipse | IntelliJ IDEA | Notes |
|---|---|---|---|
| Rename | Alt + Shift + R |
Shift + F6 |
Renames a variable, method, class, or package across ALL references in the project. The most important refactoring shortcut. |
| Extract Variable | Alt + Shift + L |
Ctrl + Alt + V |
Extracts a selected expression into a new local variable |
| Extract Constant | N/A (use menu) |
Ctrl + Alt + C |
Extracts a value into a static final constant |
| Extract Field | Alt + Shift + F |
Ctrl + Alt + F |
Extracts a value into an instance field |
| Extract Method | Alt + Shift + M |
Ctrl + Alt + M |
Extracts selected code into a new method. The IDE figures out the parameters and return type. |
| Extract Parameter | N/A (use menu) | Ctrl + Alt + P |
Converts a local variable or expression into a method parameter |
| Inline | Alt + Shift + I |
Ctrl + Alt + N |
Opposite of extract: replaces a variable/method with its value/body |
| Move Class | Alt + Shift + V |
F6 |
Move a class to a different package (updates all imports) |
| Change Method Signature | Alt + Shift + C |
Ctrl + F6 |
Add/remove/reorder parameters, change return type |
| Refactoring Menu | Alt + Shift + T |
Ctrl + Alt + Shift + T |
Shows all available refactoring options for the selected code |
Rename is the refactoring you will use most often. It is drastically safer than find-and-replace because the IDE understands Java:
// Before renaming: variable "name" is used in multiple places
public class UserService {
public User findUser(String name) { // parameter "name"
log.info("Searching for: " + name); // reference to "name"
User user = repository.findByName(name); // reference to "name"
if (user == null) {
throw new UserNotFoundException("User not found: " + name);
}
return user;
}
}
// Place cursor on "name" and press Shift + F6 (IntelliJ) or Alt + Shift + R (Eclipse)
// Type "username" and press Enter
// ALL references update simultaneously -- but "findByName" (different variable) is NOT changed
// After renaming:
public class UserService {
public User findUser(String username) { // renamed
log.info("Searching for: " + username); // renamed
User user = repository.findByName(username); // renamed (the argument)
if (user == null) {
throw new UserNotFoundException("User not found: " + username);
}
return user;
}
}
// The method name "findByName" was correctly left unchanged because
// it is a different identifier. Find-and-replace would have broken it.
Extract Method is the second most important refactoring. It takes a block of code, moves it into a new method, and replaces the original code with a call to the new method:
// Before: a long method doing too many things
public void processOrder(Order order) {
// Select these lines, then press Ctrl + Alt + M (IntelliJ) or Alt + Shift + M (Eclipse)
double subtotal = 0;
for (OrderItem item : order.getItems()) {
subtotal += item.getPrice() * item.getQuantity();
}
double tax = subtotal * 0.08;
double total = subtotal + tax;
order.setTotal(total);
// End selection
sendConfirmationEmail(order);
updateInventory(order);
}
// After: the IDE extracts it into a new method automatically
public void processOrder(Order order) {
calculateTotal(order); // extracted method call
sendConfirmationEmail(order);
updateInventory(order);
}
// The IDE generated this method with the correct parameter and logic
private void calculateTotal(Order order) {
double subtotal = 0;
for (OrderItem item : order.getItems()) {
subtotal += item.getPrice() * item.getQuantity();
}
double tax = subtotal * 0.08;
double total = subtotal + tax;
order.setTotal(total);
}
Debugging shortcuts let you step through code, inspect variables, and find bugs without constantly clicking buttons in the debug toolbar. These are essential for efficient debugging sessions.
| Action | Eclipse | IntelliJ IDEA | Notes |
|---|---|---|---|
| Toggle Breakpoint | Ctrl + Shift + B |
Ctrl + F8 |
Set or remove a breakpoint on the current line |
| Run in Debug Mode | F11 |
Shift + F9 |
Start the application in debug mode |
| Run (No Debug) | Ctrl + F11 |
Shift + F10 |
Run without debugging |
| Step Over | F6 |
F8 |
Execute the current line and move to the next (skip method internals) |
| Step Into | F5 |
F7 |
Enter into the method call on the current line |
| Step Out | F7 |
Shift + F8 |
Finish the current method and return to the caller |
| Resume | F8 |
F9 |
Continue execution until the next breakpoint |
| Run to Cursor | Ctrl + R |
Alt + F9 |
Run until execution reaches the line where your cursor is (temporary breakpoint) |
| Evaluate Expression | Ctrl + Shift + I |
Alt + F8 |
Evaluate any Java expression during debugging (inspect variables, call methods) |
| View Breakpoints | Breakpoints View | Ctrl + Shift + F8 |
See all breakpoints, add conditions, enable/disable |
| Stop | Ctrl + F2 |
Ctrl + F2 |
Terminate the running application (same in both) |
| Smart Step Into | N/A | Shift + F7 |
IntelliJ-only: when a line has multiple method calls, choose which one to step into |
Pro tip: In IntelliJ, you can set conditional breakpoints. Right-click on a breakpoint and enter a condition like user.getId() == 42. The breakpoint will only trigger when the condition is true. This is incredibly useful when debugging loops or processing lists of data.
Pro tip: In both IDEs, you can change variable values during debugging. In the Variables panel, right-click a variable and select “Set Value.” This lets you test different scenarios without restarting the application.
Search shortcuts help you find anything in your codebase. Whether you are looking for a method call, a string literal, or all usages of a class, these shortcuts get you there instantly.
| Action | Eclipse | IntelliJ IDEA | Notes |
|---|---|---|---|
| Find in Current File | Ctrl + F |
Ctrl + F |
Basic find in the current editor (same in both) |
| Find and Replace | Ctrl + H |
Ctrl + R |
Find and replace in current file. Supports regex. |
| Find in Path / Project | Ctrl + H (Search tab) |
Ctrl + Shift + F |
Search across entire project, with file filters and regex |
| Replace in Path / Project | Ctrl + H (Search tab) |
Ctrl + Shift + R |
Find and replace across entire project |
| Find Usages | Ctrl + Shift + G |
Alt + F7 |
Find all places where a class, method, or variable is used |
| Highlight Usages | Ctrl + Shift + G |
Ctrl + Shift + F7 |
IntelliJ highlights all usages in the current file |
| Find Next | Ctrl + K |
F3 or Enter |
Jump to next search result |
| Find Previous | Ctrl + Shift + K |
Shift + F3 |
Jump to previous search result |
| Search Everywhere | N/A | Double Shift |
IntelliJ-only: searches everything — classes, files, actions, settings, git branches |
| Find Action / Command | Ctrl + 3 |
Ctrl + Shift + A |
Search for any IDE action by name (useful when you forget a shortcut) |
Find Usages (Alt + F7 in IntelliJ / Ctrl + Shift + G in Eclipse) is one of the most valuable search tools. Before changing or deleting a method, use Find Usages to see every place it is called. This prevents you from breaking code you did not know about.
Pro tip: When you forget a shortcut, use Find Action (Ctrl + Shift + A in IntelliJ / Ctrl + 3 in Eclipse). Type what you want to do (e.g., “extract method”) and the IDE will show you the action along with its keyboard shortcut.
Both Eclipse (with EGit) and IntelliJ IDEA have built-in Git support. These shortcuts let you commit, push, pull, and review changes without leaving the IDE or opening a terminal.
| Action | Eclipse (EGit) | IntelliJ IDEA | Notes |
|---|---|---|---|
| Commit | Ctrl + # (Team menu) |
Ctrl + K |
Open the commit dialog with staged changes |
| Push | Team > Push | Ctrl + Shift + K |
Push committed changes to remote |
| Pull / Update | Team > Pull | Ctrl + T |
Pull latest changes from remote |
| Show Diff | Compare With > HEAD | Ctrl + D (in commit dialog) |
See what changed in a file compared to the last commit |
| Show History / Log | Team > Show in History | Alt + 9 |
View the Git log for a file or the entire project |
| Annotate / Blame | Team > Show Annotations | Right-click gutter > Annotate | See who wrote each line and when (git blame) |
| VCS Operations Menu | N/A | Alt + ` (backtick) |
IntelliJ-only: quick access to all VCS operations |
| Rollback / Revert | Replace With > HEAD | Ctrl + Alt + Z |
Revert selected file changes to the last committed version |
| Create Branch | Team > Switch To > New Branch | Git widget (bottom-right) or VCS menu | Both IDEs let you create and switch branches from the IDE |
Pro tip: IntelliJ’s commit dialog (Ctrl + K) lets you review every changed file, see the diff, write a commit message, and amend the previous commit — all in one place. You can also run code analysis before committing to catch issues.
Live templates (IntelliJ) and code templates (Eclipse) let you type a short abbreviation and expand it into a complete code snippet. Both IDEs come with built-in templates, and you can create your own.
| Abbreviation | Expansion | Eclipse | IntelliJ |
|---|---|---|---|
sout |
System.out.println(); |
sysout + Ctrl + Space |
sout + Tab |
souf |
System.out.printf(); |
N/A (manual) | souf + Tab |
soutv |
System.out.println("var = " + var); |
N/A | soutv + Tab |
main |
public static void main(String[] args) { } |
main + Ctrl + Space |
psvm + Tab |
fori |
for (int i = 0; i < ; i++) { } |
for + Ctrl + Space |
fori + Tab |
foreach |
for (Type item : collection) { } |
foreach + Ctrl + Space |
iter + Tab |
ifn |
if (var == null) { } |
N/A | ifn + Tab |
inn |
if (var != null) { } |
N/A | inn + Tab |
thr |
throw new |
N/A | thr + Tab |
St |
String |
N/A | St + Tab |
psf |
public static final |
N/A | psf + Tab |
psfs |
public static final String |
N/A | psfs + Tab |
IntelliJ also supports postfix completion, which is uniquely powerful. You type an expression first, then add a template suffix:
// Postfix completion (IntelliJ only) -- type the expression FIRST, then the template // .var -- creates a variable from an expression new ArrayList().var // press Tab --> List strings = new ArrayList<>(); // .if -- wraps in an if statement user != null.if // press Tab --> if (user != null) { } // .not -- negates a boolean isValid.not // press Tab --> !isValid // .for -- creates a for-each loop users.for // press Tab --> for (User user : users) { } // .fori -- creates an indexed for loop users.fori // press Tab --> for (int i = 0; i < users.size(); i++) { } // .null -- null check result.null // press Tab --> if (result == null) { } // .nn -- not-null check result.nn // press Tab --> if (result != null) { } // .try -- wraps in try-catch inputStream.read().try // press Tab --> try { inputStream.read(); } catch (Exception e) { } // .return -- adds return statement calculateTotal().return // press Tab --> return calculateTotal(); // .sout -- wraps in System.out.println result.sout // press Tab --> System.out.println(result);
IntelliJ: Go to Settings > Editor > Live Templates. Click the + button, define an abbreviation, write the template text, and set the context (Java, etc.).
Eclipse: Go to Window > Preferences > Java > Editor > Templates. Click "New", define a name, and write the template pattern.
Here are some useful custom templates you should create:
// Custom template: "log" -- creates a logger declaration
// Abbreviation: log
// Template:
private static final Logger log = LoggerFactory.getLogger($CLASS_NAME$.class);
// Set $CLASS_NAME$ to className() expression in IntelliJ
// Custom template: "todo" -- creates a TODO comment with date
// Abbreviation: todo
// Template:
// TODO ($USER$ - $DATE$): $END$
// Set $USER$ to user(), $DATE$ to date(), $END$ is where cursor lands
// Custom template: "test" -- creates a JUnit test method
// Abbreviation: test
// Template:
@Test
void should$NAME$() {
// Given
$END$
// When
// Then
}
// Custom template: "builder" -- creates a builder pattern skeleton
// Abbreviation: builder
// Template:
public static class Builder {
public Builder $FIELD_NAME$($TYPE$ $PARAM$) {
this.$FIELD_NAME$ = $PARAM$;
return this;
}
public $CLASS_NAME$ build() {
return new $CLASS_NAME$(this);
}
}
Eclipse template variables: Eclipse uses ${cursor} for cursor position, ${enclosing_type} for the class name, ${word_selection} for selected text, and ${date} for the current date.
IntelliJ template variables: IntelliJ uses $END$ for cursor position and supports expressions like className(), date(), user(), suggestVariableName(), and completeSmart() for intelligent auto-fill.
Both IDEs allow you to customize any keyboard shortcut. This is useful when you want to match your muscle memory from another editor, fix conflicts with your OS, or assign shortcuts to frequently-used actions that have no default binding.
Window > Preferences > General > KeysSettings > KeymapIntelliJ provides pre-built keymaps that match other editors:
| Keymap | Matches | When to Use |
|---|---|---|
| IntelliJ IDEA Classic | IntelliJ defaults | New IntelliJ users or those who learned IntelliJ first |
| Eclipse | Eclipse keybindings | Developers transitioning from Eclipse to IntelliJ |
| VS Code | Visual Studio Code bindings | Developers coming from VS Code |
| NetBeans | NetBeans keybindings | Developers transitioning from NetBeans |
| macOS | macOS conventions (Cmd-based) | Mac users (default on macOS IntelliJ) |
Recommendation: If you are switching from Eclipse to IntelliJ, start with the Eclipse keymap to maintain productivity. Over time, gradually learn the IntelliJ-specific shortcuts (like Double Shift, postfix completion, and Ctrl + W for expanding selection) since they have no Eclipse equivalent and are genuinely more powerful.
If you take nothing else from this tutorial, learn these 20 shortcuts. They cover the actions you perform most frequently and will give you the biggest productivity boost. The shortcuts are ordered by how often a typical Java developer uses them.
| # | Action | Eclipse | IntelliJ IDEA | Why It Matters |
|---|---|---|---|---|
| 1 | Autocomplete | Ctrl + Space |
Ctrl + Space |
Fastest way to write code -- type 2-3 chars and let the IDE finish |
| 2 | Quick Fix | Ctrl + 1 |
Alt + Enter |
Fixes errors, adds imports, creates methods, suggests improvements |
| 3 | Go to Class | Ctrl + Shift + T |
Ctrl + N |
Jump to any class instantly instead of browsing the project tree |
| 4 | Go to Declaration | F3 |
Ctrl + B |
Jump to where something is defined -- essential for code exploration |
| 5 | Rename | Alt + Shift + R |
Shift + F6 |
Safely rename across the entire project in one action |
| 6 | Find in Project | Ctrl + H |
Ctrl + Shift + F |
Search for any text, regex, or pattern across all files |
| 7 | Format Code | Ctrl + Shift + F |
Ctrl + Alt + L |
Auto-format to maintain consistent code style |
| 8 | Organize Imports | Ctrl + Shift + O |
Ctrl + Alt + O |
Add missing imports and remove unused ones in one keystroke |
| 9 | Comment Line | Ctrl + / |
Ctrl + / |
Instantly comment/uncomment code for debugging or testing |
| 10 | Duplicate Line | Ctrl + Alt + Down |
Ctrl + D |
Copy a line without cut/paste -- great for repetitive code |
| 11 | Delete Line | Ctrl + D |
Ctrl + Y |
Remove an entire line without selecting it first |
| 12 | Move Line | Alt + Up/Down |
Alt + Shift + Up/Down |
Rearrange code without cut/paste |
| 13 | Find Usages | Ctrl + Shift + G |
Alt + F7 |
See everywhere a method/variable/class is used before changing it |
| 14 | Generate Code | Alt + Shift + S |
Alt + Insert |
Generate constructors, getters, setters, toString, equals, hashCode |
| 15 | Extract Method | Alt + Shift + M |
Ctrl + Alt + M |
Break long methods into smaller, readable pieces |
| 16 | Surround With | Alt + Shift + Z |
Ctrl + Alt + T |
Wrap code in try/catch, if/else, loop without manual typing |
| 17 | Navigate Back | Alt + Left |
Ctrl + Alt + Left |
Go back to where you were before (like browser back button) |
| 18 | Toggle Breakpoint | Ctrl + Shift + B |
Ctrl + F8 |
Set/remove breakpoints without clicking in the margin |
| 19 | Step Over (Debug) | F6 |
F8 |
Execute one line at a time during debugging |
| 20 | Search Everywhere | Ctrl + 3 |
Double Shift |
Find anything -- the ultimate "I do not know where this is" shortcut |
Here is a practical plan for learning these shortcuts:
Print this table and keep it next to your monitor. Every time you reach for the mouse to do one of these actions, stop, look at the table, and use the shortcut instead. Within a month, you will not need the table anymore.
IntelliJ IDEA has a built-in feature that tracks your shortcut usage. Go to Help > My Productivity (or Help > Productivity Guide in older versions). It shows you which shortcuts you use, which features save you the most time, and which actions you still perform the slow way. Use this to identify your next shortcuts to learn.
In Eclipse, press and hold Ctrl + Shift + L to see a popup of all available shortcuts. Press it again to open the Keys preferences where you can customize any shortcut. This is useful when you know what you want to do but cannot remember the key combination.