Ответ найден, использовал 2 структуры, trie+red-black trees.
На каждую ноду есть коллекция SortedSet, она работает как red-black-tree.
Соответственно в коллекцию попадают все ноды которые проходят дерево.
В конечном итоге получаем отсортированную коллекцию.
Насчет памяти только не эффективно, но там используются классы для ноды, не структуры. Так что в коллекции хранятся только ссылки.
Требования по памяти не было.
Само приложение должно обрабатывать контент, т.е. через ссылки с префиксами по типу skype:accountName , либо остается только скачивать файл с расширением конкретной программы(в вашем случае расширение GNS3)
Разбивайте функционал на блоки, используйте SOLID, избегайте повторения, продумывайте функционал с использованием KISS, YAGNI. Остальное за вас дорисует интуиция.
Согласен с Therapyx
Шансов написать криво и небезопасно на Java/C# меньше чем на PHP, при этом стоимость хостинга не намного больше. Плюс экономия на распределенке т.к. как ни хвали Hip-hop и kPhp, на нем еще мало разработчиков пишут, в основном так, поиграться. По безопасности достаточно взглянуть на exploit-db.com с тикетами PHP Core и сравнить их с аналогичными ASP.NET/Spring/Tomcat и т.п..