У меня есть список имен пользователей и список паролей. У двух или более пользователей может быть один и тот же пароль.
ArrayList<String> u = new ArrayList<String>();
ArrayList<String> p = new ArrayList<String>();
Эти массивы заполняются из файла следующего формата:
username password
Вот так;
String line = null;
String split[] = null;
while ((line = reader.readLine()) != null){
split = line.split("\\s+");
u.add(split[0]);
p.add(split[1]);
}
У меня есть алгоритм грубой силы, который генерирует пароли, и я хочу найти, если созданные пароли имеют совпадение.
String password = bruteForce()
if (passwords.contains(password)){
int index = passwords.indexOf(password);
System.out.println("Username: " + usernames.get(index));
System.out.println("Password: " + password);
}
Это хорошо работает, если ни один из пользователей не имеет одного и того же пароля. Если у двух пользователей одинаковый пароль; он просто захватит первое вхождение и распечатает это, пропустив второго пользователя.
Мне нужен способ определить, есть ли несколько вхождений одного и того же пароля, получить каждый индекс вхождения, а затем их совпадающее имя пользователя.
Помимо того факта, что вы не должны хранить текстовые пароли или строковые пароли, чтобы ответить на вопрос:
Попробуйте использовать Collections.frequency
int amount = Collections.frequency(yourCollection, yourObject);
Что касается вашего дизайна, вы также можете попробовать что-то еще более ограниченное:
List<Tuple<String, String>> accounts = new ArrayList<>();
//Or even making an account object and then
List<Account> accounts = new ArrayList<>();
User
. Вы бы просто имели список пользователей, а затем перебирали его и проверяли каждый пароль.