Так фишка-то в том, что остаточный член — это оценка точности аппроксимации. Если бы у теты было определенное значение, то вы бы разложили функцию в конечную сумму без погрешности.
Возможно, дело в том, что во втором случае instance создаётся не при вызове метода getInstance(), а при загрузке класса в виртуальную машину. То есть, если вы каким-то образом обратитесь к этому классу не для того, чтобы получить instance, то он всё равно будет создан.
Если важна именно производительность, то задача аналогична задаче о проверке вхождения подстроки. Для этого можно воспользоваться алгоритмами Кнута-Морриса-Пратта или Рабина-Карпа.
Так как volatile write и volatile read находятся в отношении happens-before, поток, читающий значение, увидит все действия, которые делал поток, вызвавший rebuild(), до volatile write. То есть внутри одного потока все операции находятся в отношении happens-before, а так как это отношение транзитивно, то другие потоки увидят уже правильное значение переменной.
Мне кажется, что метод toArray() должен быть реализован в обоих типах матриц. Если есть интерфейс Matrix, то в нём должен быть метод toArray(). Уже в конкретной реализации разреженной матрицы можно добавить метод, предствляющий матрицу в более компактном виде.
Специфичность разреженной матрицы должна быть на уровне реализации, например использование более оптимальных алгоритмов при перемножении и т.п. Это как LinkedList и ArrayList. Методы-то в них одинаковые, пользователь сам решает для чего он будет использовать список и выбирает реализацию. Кажется, что в вашем случае должно быть так же.
Если A extends B, это не значит, что Set extends SetМожно просто написать
Set<java.util.Map.Entry<String, T>> x = new HashSet<java.util.Map.Entry<String, T>>();
и класть туда свою реализацию.
если у вас поле принимает ограниченное количество значений, (enumeration), то по нему будет построена битовая шкала. То есть для каждого значения будет храниться вектор из 0 и 1 длиной в количество записей. Думаю дальше понятно.
Таким образом можно сразу получить номера записей с данным значением поля.