Поскольку AbstractStringBuilder
не является public class
, не спрашивая разработчиков, почему они его написали, можно только предположить ...
Спекуляция
Обратите внимание, что StringBuffer
],
Потоковая, изменяемая последовательность символов.
blockquote>добавлена в 1.0.
StringBuilder
Javadoc читаетИзменчивая последовательность символов. Этот класс предоставляет API, совместимый с
blockquote>StringBuffer
, но без гарантии синхронизации. Этот класс предназначен для использования в качестве замены для заменыStringBuffer
в местах, где строковый буфер использовался одним потоком (как это обычно бывает). По возможности рекомендуется, чтобы этот класс использовался по сравнению сStringBuffer
, поскольку он будет быстрее в большинстве реализаций.(выделено мной) и добавлен в 1.5. Идея состоит в том, что в большинстве случаев этот класс является улучшением
StringBuffer
, но в целом очень похож на функциональность (может заменить друг друга). Как замечают @immibis и @MadProgrammer в комментариях, идея наследования экономит массу неприятностей в тех случаях, когда вы хотите схожие функции.Я нашел один простой пример в методе
append(String
). ВStringBuilder
это@Override public StringBuilder append(String str) { super.append(str); return this; }
В
StringBuffer
это@Override public synchronized StringBuffer append(String str) { toStringCache = null; super.append(str); return this; }
, а в
AbstractStringBuilder
-public AbstractStringBuilder append(String str) { if (str == null) return appendNull(); int len = str.length(); ensureCapacityInternal(count + len); str.getChars(0, len, value, count); count += len; return this; }
Мы видим, что единственная разница между поточно-безопасными и небезопасными версиями - это некоторый контроль кеша (
toStringCache
), но оба они называют один и тот же метод в своем суперклассе, следовательно, повторно используют код через наследование.Аналогия
Подумайте об этом, как о том, что вы - один код. Вы создаете класс
dog
, который включает анатомическую структуру собаки (уши, хвост, 4 ноги ...) и методы, связанные с ее действием, такие какbark
. Через 5 лет вы хотите создать классcat
для представления кошки. Вы начнете с нуля? Нет, вы создали быabstract class FourLeggedAnimal
со структурой ушей, хвоста, 4 ножек и т. Д. И с помощью методаmakeSound
. Затем вы продолжите этот класс и используйте все эти сходства в обоих подклассах, переопределив при необходимости (bark
иmeow
).
В чем смысл создавая бесполезную оболочку StringBuilder?
blockquote>будет таким же, как кто-то спрашивает вас
В чем смысл создания бесполезной оболочки Cat?
< / BLOCKQUOTE>
Я запустил код с соответствующим отступом, как показано ниже, и получил правильный вывод.
def recursiveSort(sensor_list,n,t): #Recursive Sort
if n == 0:
return sensor_list
for i in range(n-1):
if sensor_list[i][t] > sensor_list[i + 1][t]:
temp = sensor_list[i]
sensor_list[i] =sensor_list[i + 1]
sensor_list[i + 1] = temp
return recursiveSort(sensor_list,n - 1,t)
Dict = {'4213' : ('STEM Center', 0),
'4201' : ('Foundations Lab', 1),
'4204' : ('CS Lab', 2),
'4218' : ('Workshop Room', 3),
'4205' : ('Tiled Room', 4),
'out' : ('Outside', 5),
}
sensor_list=[]
[sensor_list.append((key,Dict[key][0],Dict[key][1])) for key in Dict ] #Adding values to a dictionary into a tuple using list comprehension
print sensor_list
print recursiveSort(sensor_list,len(sensor_list),0)
print recursiveSort(sensor_list,len(sensor_list),1)
print sensor_list
В соответствии с полученным результатом, я думаю, что ошибка связана с неправильным отступом цикла for , Скорее всего, это выглядит так.
if n == 0:
return sensor_list
for i in range(n-1):
if sensor_list[i][t] > sensor_list[i + 1][t]:
temp = sensor_list[i]
sensor_list[i] =sensor_list[i + 1]
sensor_list[i + 1] = temp
Цикл for не выполняется вообще, потому что
И, вероятно, ваш оператор return recursiveSort(sensor_list,n - 1,t)
также вышел из отступ.
def recursiveSort(sensor_list,n,t): #Recursive Sort
if (n == 0):
return sensor_list
else:
for i in range(n-1):
if sensor_list[i][t] > sensor_list[i + 1][t]:
temp = sensor_list[i]
sensor_list[i] =sensor_list[i + 1]
sensor_list[i + 1] = temp
return recursiveSort(sensor_list,n - 1,t)
Dict = {'4213' : ('STEM Center', 0),
'4201' : ('Foundations Lab', 1),
'4204' : ('CS Lab', 2),
'4218' : ('Workshop Room', 3),
'4205' : ('Tiled Room', 4),
'out' : ('Outside', 5),
}
sensor_list=[]
[ sensor_list.append((key,Dict[key][0],Dict[key][1])) for key in Dict ] #Adding
values to a dictionary into a tuple using list comprehension
print(sensor_list)
print recursiveSort(sensor_list,len(sensor_list),0)
print recursiveSort(sensor_list,len(sensor_list),1)
print sensor_list