Я создал собственную реализацию хэш-таблицы, в которой связанный список хранится в каждой записи массива (размер которого равен 11). Я пытаюсь извлечь элементы хеш-таблицы в один массив, а затем отсортировать массив элементов. Я подумал о том, чтобы просто извлечь каждый связанный список в результирующий массив и затем отсортировать массив позже. Как показано ниже в методе
//turns the whole hash table into an array
private int[] toArray() {
int sizeOfArray = 0;
for(int i=0; i<11; i++)
{
//calculate the total number of elements in the hashTable
sizeOfArray += hashMap.getList(i).size();
}
int[] result = new int[sizeOfArray];
int indexRes = 0;
//import every entry from the hash table into a single array
for(int i=0; i<11; i++)
{
KeyValuePairLinkedList list = hashMap.getList(i);
//convert the list to an array
int[] listArray = list.toArray();
for(int j=0; j<list.size(); j++)
{
result[indexRes] = listArray[j];
indexRes++;
}
}
return result;
}
Но если элементы в каждом связанном списке уже отсортированы, тогда я мог бы просто объединить элементы в один массив, подобно тому, как алгоритм сортировки слияния объединяет два массива, однако я бы объединил 11 массивов, а не только 2, и я предполагая, что это потребует много кода.
Кроме того, скажем, я хотел извлечь только целые числа, хранящиеся в моей хэш-таблице, которые являются четными, а затем отсортировать эти целые числа в результирующем массиве. Я мог бы использовать тот же метод снова, извлекая всю хэш-таблицу в один массив, а затем удаляю нечетные целые числа, а затем сортируем. Но должен быть лучший способ сделать это.
один способ сделать это, если массивы уже отсортированы
продолжайте делать это, пока не исчерпаете все массивы. каждый элемент в куче имеет значение + указатель на какой массив и какой индекс он есть.
обратите внимание на специальный случай, когда один из массивов исчерпан, и вам больше не нужно вставлять кучу.