Для целей создания копии объекта и получения доступа к его данным, что лучше и почему?
1. Создайте новый объект и инициализируйте его с помощью данных, которые вы хотите клон через конструктор
HashSet<String> myClone = new HashSet<String>(data);
2. Клонируйте объект как есть и приводите его к типу, который вы считаете
HashSet<String> myClone = (HashSet<String>) data.clone();