Тестирование с использованием нулевых элементов (null elements)
На предыдущих этапах мы увидели, как HashSet
обрабатывает дубликаты не-нулевых элементов. Теперь давайте исследуем, как ведет себя HashSet
, когда мы пытаемся добавить нулевые элементы (null
). Понимание того, как коллекции обрабатывают null
, важно, так как это иногда может привести к неожиданному поведению или ошибкам, если не обрабатывать это осторожно.
HashSet
позволяет добавить один нулевой элемент (null
). Если вы попытаетесь добавить null
несколько раз, будет сохранен только первый null
.
Давайте еще раз изменим нашу программу DuplicateCheck.java
, чтобы протестировать это.
Откройте файл DuplicateCheck.java
в редакторе кода WebIDE.
Измените метод main
, чтобы в список были включены нулевые значения (null
):
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class DuplicateCheck {
public static void main(String[] args) {
// Create a list with some duplicate and null elements
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add(null); // Add null
names.add("Alice"); // Duplicate
names.add("Charlie");
names.add(null); // Add null again
names.add("Bob"); // Duplicate
names.add("David");
names.add(null); // Add null a third time
System.out.println("Original List: " + names);
System.out.println("Size of Original List: " + names.size());
// Create a HashSet from the list
Set<String> uniqueNamesSet = new HashSet<>(names);
System.out.println("Set created from List: " + uniqueNamesSet);
System.out.println("Size of Set: " + uniqueNamesSet.size());
// The difference in size tells us how many duplicates were removed
// Note: This calculation is less straightforward with nulls and duplicates combined
// int duplicatesCount = names.size() - uniqueNamesSet.size();
// System.out.println("Number of duplicates (excluding first occurrence): " + duplicatesCount);
}
}
Здесь мы добавили null
в список names
несколько раз. Мы также закомментировали вычисление количества дубликатов, так как оно становится менее осмысленным, когда присутствует null
, и мы сосредотачиваемся на поведении множества с null
.
Сохраните измененный файл DuplicateCheck.java
.
Скомпилируйте программу в терминале:
javac DuplicateCheck.java
Если компиляция прошла успешно, запустите программу:
java DuplicateCheck
Вы должны увидеть вывод, похожий на следующий:
Original List: [Alice, Bob, null, Alice, Charlie, null, Bob, David, null]
Size of Original List: 9
Set created from List: [null, Alice, Bob, Charlie, David]
Size of Set: 5
Обратите внимание на вывод:
- В
Original List
показаны все элементы, включая несколько значений null
. Его размер равен 9.
Set created from List
содержит только уникальные элементы. Обратите внимание, что null
появляется в множестве только один раз, даже несмотря на то, что он был добавлен в список несколько раз. Размер множества равен 5 (Alice, Bob, Charlie, David и null).
Это подтверждает, что HashSet
позволяет один нулевой элемент (null
) и рассматривает последующие добавления null
как дубликаты, как и любые другие элементы.
Вы успешно протестировали, как HashSet
обрабатывает нулевые элементы (null
). Это завершает наше исследование использования HashSet
для проверки на дубликаты и понимание его поведения с уникальными и нулевыми элементами.