diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ModelObjectWriter.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ModelObjectWriter.java
index 7c5f6ea..d3c2757 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ModelObjectWriter.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ModelObjectWriter.java
@@ -226,7 +226,7 @@
 			if (links != null) {
 				// ensure consistent order of map elements
 				List<LinkDescription> sorted = new ArrayList<>(links.values());
-				Collections.sort(sorted);
+				sorted.sort(null);
 				write(LINKED_RESOURCES, sorted, writer);
 			}
 			HashMap<IPath, LinkedList<FilterDescription>> filters = description.getFilters();
@@ -236,13 +236,13 @@
 					List<FilterDescription> list = linkedList;
 					sorted.addAll(list);
 				}
-				Collections.sort(sorted);
+				sorted.sort(null);
 				write(FILTERED_RESOURCES, sorted, writer);
 			}
 			HashMap<String, VariableDescription> variables = description.getVariables();
 			if (variables != null) {
 				List<VariableDescription> sorted = new ArrayList<>(variables.values());
-				Collections.sort(sorted);
+				sorted.sort(null);
 				write(VARIABLE_LIST, sorted, writer);
 			}
 		}
@@ -264,7 +264,7 @@
 		if (table != null) {
 			// ensure consistent order of map elements
 			List<String> sorted = new ArrayList<>(table.keySet());
-			Collections.sort(sorted);
+			sorted.sort(null);
 
 			for (String key : sorted) {
 				Object value = table.get(key);
diff --git a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/CountResourcesAction.java b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/CountResourcesAction.java
index c2bd657..183d959 100644
--- a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/CountResourcesAction.java
+++ b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/CountResourcesAction.java
@@ -207,7 +207,7 @@
 			return;
 
 		//	we sort the resources list by path so it is easier to check for redundancies
-		Collections.sort(resourcesList, (resource1, resource2) -> resource1.getFullPath().toString().compareTo(resource2.getFullPath().toString()));
+		resourcesList.sort((resource1, resource2) -> resource1.getFullPath().toString().compareTo(resource2.getFullPath().toString()));
 
 		// We iterate through the list removing any resource which is descendant
 		// from any resource previously visited
diff --git a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ElementTreeView.java b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ElementTreeView.java
index 1b74308..06df05a 100644
--- a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ElementTreeView.java
+++ b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ElementTreeView.java
@@ -117,7 +117,7 @@
 
 		void analyzeStrings() {
 			sortedList = new ArrayList<>(strings.values());
-			Collections.sort(sortedList);
+			sortedList.sort(null);
 		}
 
 		void analyzeTrees() {
@@ -323,7 +323,7 @@
 		private List<Map.Entry<Object, Integer>> sortEntrySet(Set<Map.Entry<Object, Integer>> set) {
 			List<Map.Entry<Object, Integer>> result = new ArrayList<>();
 			result.addAll(set);
-			Collections.sort(result, (arg0, arg1) -> arg1.getValue().intValue() - arg0.getValue().intValue());
+			result.sort((arg0, arg1) -> arg1.getValue().intValue() - arg0.getValue().intValue());
 			return result;
 		}
 
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/ProjectPreferencesTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/ProjectPreferencesTest.java
index 5b28221..8080a82 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/ProjectPreferencesTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/ProjectPreferencesTest.java
@@ -870,7 +870,7 @@
 				}
 			}
 			assertEquals(2, lines.size());
-			Collections.sort(lines);
+			lines.sort(null);
 			assertTrue(lines.get(0).equals("KEY=VALUE"));
 			assertTrue(lines.get(1).equals("NEW_KEY=NEW_VALUE"));
 		} catch (IOException e) {
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/CharsetTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/CharsetTest.java
index 09093d8..29ea23b 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/CharsetTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/CharsetTest.java
@@ -157,40 +157,6 @@
 		}
 	}
 
-	//	private void checkPreferencesContent(String tag, IFile prefs, String[] lines) {
-	//		BufferedReader br = null;
-	//		try {
-	//			br = new BufferedReader(new FileReader(prefs.getLocation().toFile()));
-	//			List<String> actualList = new ArrayList<String>();
-	//			String line = br.readLine();
-	//			while (line != null) {
-	//				if (!line.startsWith("#")) {
-	//					actualList.add(line);
-	//				}
-	//				line = br.readLine();
-	//			}
-	//
-	//			assertEquals(tag, lines.length, actualList.size());
-	//			List<String> expectedLines = Arrays.asList(lines);
-	//			Collections.sort(expectedLines);
-	//			Collections.sort(actualList);
-	//			for (int i = 0; i < expectedLines.size(); i++) {
-	//				assertTrue(tag, expectedLines.get(i).equals(actualList.get(i)));
-	//			}
-	//		} catch (FileNotFoundException e) {
-	//			fail(tag, e);
-	//		} catch (IOException e) {
-	//			fail(tag, e);
-	//		} finally {
-	//			if (br != null)
-	//				try {
-	//					br.close();
-	//				} catch (IOException e) {
-	//					fail(tag, e);
-	//				}
-	//		}
-	//	}
-
 	private void clearAllEncodings(IResource root) throws CoreException {
 		if (root == null || !root.exists()) {
 			return;
