Реализация List
Будучи подтипом Collection, все методы в интерфейсе Collection также доступны в Listinterface.
Поскольку List – это интерфейс, вам необходимо создать конкретную реализацию интерфейса, чтобы использовать его. Вы можете выбирать между следующими реализациями List в API коллекций Java:
- java.util.ArrayList
- java.util.LinkedList
- java.util.Vector
- java.util.Stack
Также есть параллельные реализации List в пакете java.util.concurrent.
Вот несколько примеров того, как создать экземпляр List:
List listA = new ArrayList(); List listB = new LinkedList(); List listC = new Vector(); List listD = new Stack();
Работа со строками
Я часто вижу баги там, где логике при генерации строк не удается учесть нулевые значения, в результате чего среди строк пользовательского интерфейса появляется . Причина такого коварного поведения в том, что в Java при конкатенации строк неожиданное нулевое значение не ведет к NPE до тех пор, пока для него явно не вызываются методы. Если мы заглянем внутрь JRE, то выясним, что null-значения часто явно обрабатываются и преобразуются в — значения. Каждый раз, когда мы используем сокращение “”, генерируется и используется для создания объединенного значения. Это означает, что правосторонние значения присваиваний и по факту эквивалентны:
В обоих случаях получится строка . Конкатенацию также можно выполнить при помощи , и это, что интересно, будет вызывать NPE всякий раз, когда будет . Тем не менее метод concat не является предпочтительным несмотря на то, что справляется лучше при конкатенации всего нескольких строк. В связи с этим мы, как правило, будем обнаруживать -строки лишь в UI.
Используйте класс Objects и библиотеку StringUtils
Ошибки нередко прокрадываются в базу кода, когда у нас нет ясного понимания того, что код делает или почему он это делает
Здесь важно удобство в обслуживании. Я часто сталкиваюсь с запутанным кодом создания строки
По какой-то причине люди склонны увлекаться тернарными выражениями, помещая их в другие выражения или вкладывая друг в друга. Это очень эффективно усложняет чтение и понимание простой логики.
Тернарный оператор часто используется для возвращения предустановленного значения, когда переменная содержит . Ниже приведен пример этого, взятый прямо из нашей базы кода Columna:
Примечательно, что это не самый сложный для анализа код, но я думаю, что его можно написать гораздо лучше. В C# существует так называемый оператор объединения с неопределенным значением, относящийся к тернарному оператору, явно проверяющему значение на . Вот пример:
Здесь левое значение оператора присваивается, если оно не , в противном случае используется правая сторона. Несмотря на то, что в Java недостает подобного оператора, с той же целью можно использовать встроенный класс , описанный выше. Метод класса возвращает значение первого объекта, если этот объект не , в противном случае он возвращает указанное строковое значение.
Не так складно, как в примере с C#, но, на мой взгляд, намного надежнее, чем исходный пример, а значит и шанс появления ошибок при работе с кодом уже существенно меньше.
Используйте StringUtils для защиты String-методов от null
Библиотека StringUtils упрощает обработку и пустых строк. В API это описывается как: “Защищенные от null операции со String.” Эта библиотека содержит много стандартных строковых операций со встроенными проверками на . При ее использовании база кода станет менее громоздкой, так как вам не потребуется реализовывать весь рутинный код проверок на , и читать условные выражения станет легче
При этом база кода также станет более единообразной, и что более важно, код станет безопаснее, так как вы уже ненароком не забудете реализовать проверки нулевых значений. В частности, такая агрессивная защита выражений конкатенации с условными инструкциями на основе метода гарантирует, что в строки уже не проскользнут нежелательные “null”-значения
Преобразование с использованием Integer.toString(int)
Класс Integer имеет статический метод, который возвращает объект String, представляющий параметр int, указанный в функции Integer.toString(int). Этот подход, в отличие от других, может возвращать исключение NullPointerException.
Синтаксис
Есть два разных выражения для метода Integer.toString():
public static String toString(int i) public static String toString(int i, int radix)
Параметры
Параметры этого метода:
- i: целое число, которое будет преобразовано.
- radix: используемая система счисления базы для представления строки.
Возвращаемое значение
Возвращаемое значение для обоих выражений – строка Java, представляющая целочисленный аргумент «i». Если используется параметр radix, возвращаемая строка определяется соответствующим основанием.
Пример
package MyPackage; public class Method1 { public static void main(String args[]) { int n = Integer.MAX_VALUE; String str1 = Integer.toString(n); System.out.println("The output string is: " + str1); int m = Integer.MIN_VALUE; String str2 = Integer.toString(m); System.out.println("The output string is: " + str2); } }
Типы переменных в Kotlin
Числовые типы:
Byte. Принимает только целые числа от -128 до 127. Занимает 1 байта памяти.Short. Принимает только целые числа от -32768 до 32767. Занимает 2 байта памяти.Int. Принимает только целые числа от -2147483648 до 2147483647. Занимает 4 байта памяти.Long. Принимает только целые числа от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807. Занимает 8 байтов памяти.Float. Принимает целые и дробные числа от -3.41038 до 3.41038. Занимает 4 байта памяти.Double. Принимает целые и дробные числа от ±5.010-324 до ±1.710308. Занимает 8 байтов памяти.
В примерах выше мы объявили переменные Int. На примере ниже видна «a» типа Float:
Логический тип:
Boolean. Принимает только 2 значения: true или false. Занимает 4 байта памяти:
Символьный тип:
Char. Принимает только один символ, который нужно заключать в одинарные кавычки. Занимает 2 байта памяти:
Строковый тип:
String. Принимает значения «слов», которые нужно заключать в двойные кавычки. Занимает разный объем памяти, в зависимости от размера строки:
16 ответов
Лучший ответ
Другие указали на метод , но вот еще один альтернативный подход:
Или используйте класс из Guava
Начиная с Java 8, a> является частью стандартной JRE.
687
superpupervlad
23 Июн 2021 в 15:00
Еще одно простое решение:
Более сложное решение:
Вышеупомянутое решение предполагает, что … т.е. есть «последний символ», который нужно удалить. Если вы не можете сделать это предположение и / или не можете справиться с исключением, которое может возникнуть, если предположение неверно, то сначала проверьте длину StringBuilder; например
Или
481
Stephen C
20 Ноя 2014 в 22:45
205
bragboy
27 Янв 2020 в 09:24
Начиная с Java 8, класс String имеет статический метод . Первый аргумент — это строка, которую вы хотите поместить между каждой парой строк, а второй — это (оба являются интерфейсами, поэтому работает что-то вроде . Так что вы можете просто сделать это:
Также в Java 8 вы можете использовать новый для сценариев, в которых вы хотите начать построение строки до того, как у вас будет полный список элементов для вставки в нее.
66
ArtOfWarfare
18 Май 2018 в 13:10
Просто получите позицию последнего вхождения символа.
Поскольку будет выполнять обратный поиск, и вы знаете, что он найдет его с первой попытки, производительность здесь не будет проблемой.
ИЗМЕНИТЬ
Поскольку мой ответ не прекращается (спасибо, ребята ), стоит подумать об этом:
Начиная с Java 8 , было бы более разборчивым и явным использовать StringJoiner. У него есть один метод для простого разделителя и перегрузка для префикса и суффикса.
Примеры взяты отсюда: пример
Пример использования простого разделителя:
Выход:
Пример с суффиксом и префиксом:
Выход
43
Reuel Ribeiro
9 Апр 2019 в 20:54
В этом случае,
Предпочтительнее, так как он просто присваивает последнее значение , тогда как удаление последнего символа делает
36
Rohit Reddy Korrapolu
12 Апр 2012 в 20:13
С вы можете использовать статический метод класса ,
ВЫХОД
12
ΔȺȾΔ
27 Дек 2015 в 04:29
Другая альтернатива
10
jball
2 Авг 2012 в 23:23
В качестве альтернативы,
8
VaL
11 Июл 2018 в 09:22
6
Antoine
10 Июл 2012 в 07:57
Еще одна альтернатива:
5
Jason Day
3 Авг 2010 в 11:33
Чтобы избежать повторной установки (влияния на производительность) , используйте TextUtils.isEmpty:
3
NickUnuchek
26 Фев 2016 в 09:14
Вы можете попробовать использовать класс Joiner вместо удаления последнего символа из вашего сгенерированного текста;
1
oguzhan
1 Июл 2016 в 13:59
Я делаю что-то вроде ниже:
1
Vikasdeep Singh
22 Июн 2018 в 01:52
Вот еще одно решение:
Stephan
22 Дек 2016 в 11:53
StringBuilder.Remove (stringBuilder.Length — 1, 1);
Mohamed Farook Mohamed Fazrin
10 Фев 2020 в 04:32
Сортировка символов в строке
Есть несколько способов сортировки символов в заданной строке. Рассмотрим их.
Способ первый. Конвертируем строку в массив символов через toCharArray(). Запускаем два цикла. При сравнении символов нужно учитывать их регистр, поэтому мы не только сравниваем разные символы, но и одинаковые, чтобы символы в верхнем и нижнем регистре тоже были отсортированы.
Способ прекрасно работает на английских символах. Но строка «Котёнок» даст неправильный результат: Ккноотё. Символ «ё» попал в самый конец массива.
Способ второй. Обходимся без циклов и используем метод sort().
Проблема с «ё» осталась. При этом появилась другая проблема — сначала идут символы в верхнем регистре, потом в нижнем. Получилось КОкнотё.
Переписываем пример с использованием Comparator.
Проблема с «ё» осталась, но с регистрами всё хорошо.
Кстати, в Java 8 можно использовать Stream для подобных операций. В любом случае будьте внимательные с символами другой локали. Ни один пример не решил наших проблем.
Проверка: содержит ли список элемент?
Вы можете проверить, содержит ли Java List данный элемент, используя метод List contains ().
List list = new ArrayList(); String element1 = "element 1"; list.add(element1); boolean containsElement = list.contains("element 1"); System.out.println(containsElement);
Результат:
Чтобы определить, содержит ли List этот элемент, List будет внутренне выполнять итерации своих элементов и сравнивать каждый элемент с объектом, переданным в качестве параметра.
Поскольку можно добавить нулевые значения в список, фактически можно проверить, содержит ли список нулевое значение.
list.add(null); containsElement = list.contains(null); System.out.println(containsElement);
Очевидно, что если входной параметр для contains () имеет значение null, метод contains () не будет использовать метод equals() для сравнения с каждым элементом, а вместо этого использует оператор ==.
Использование StringUtils.substring()
Вместо того, чтобы изобретать велосипед, мы можем использовать StringUtils класс из библиотеки Apache Commons Lang3 , которая предлагает полезные String операции. Одним из них является null-безопасный substring() метод , который обрабатывает исключения.
Чтобы включить StringUtils мы должны обновить наш pom.xml файл:
org.apache.commonscommons-lang33.11
StringUtils.substring() требует трех параметров: заданной Строки, индекса первого символа (в нашем случае он всегда будет равен 0) и индекса предпоследнего символа. Опять же, мы можем просто использовать метод length() и вычесть 1:
String TEST_STRING = "abcdef"; StringUtils.substring(TEST_STRING, 0, TEST_STRING.length() - 1);
Тем не менее, эта операция снова не является безопасной для нуля. Однако он будет работать с пустыми строками нормально.
Разбиение строки на подстроки
Метод split()
позволяет разбить строку на подстроки по определенному разделителю. Разделитель
– это какой-нибудь символ или набор символов (передается в качестве параметра).
Например, разобьем текст на отдельные слова (учитывая, что слова разделены
пробелом):
String text = "Я люблю язык Java!"; String words = text.split(" "); for(String word words) System.out.println(word);
Видео по теме
#1 Установка пакетов и первый запуск программы
#2 Структура программы, переменные, константы, оператор присваивания
#3 Консольный ввод/вывод, импорт пакетов
#4 Арифметические операции
#5 Условные операторы if и switch
#6 Операторы циклов while, for, do while
#7 Массивы, обработка элементов массива
#8 (часть 1) Строки в Java, методы класса String
#8 (часть 2) Строки — классы StringBuffer и StringBuider
#9 Битовые операции И, ИЛИ, НЕ, XOR
#10 Методы, их перегрузка и рекурсия
Итерации
Вы можете выполнить итерацию списка несколькими различными способами. Три наиболее распространенных способа:
- Использование итератора
- Использование цикла for-each
- Использование цикла for
- Использование API Java Stream
Итерация списка с помощью итератора
Первый способ итерации списка – использовать итератор Java.
List list = new ArrayList(); list.add("first"); list.add("second"); list.add("third"); Iterator iterator = list.iterator(); while(iterator.hasNext()) { Object next = iterator.next(); }
Вызывая метод iterator () интерфейса List.
Вызов hasNext () выполняется внутри цикла while.
Внутри цикла while вы вызываете метод Iterator next () для получения следующего элемента, на который указывает Iterator.
Если список задан с использованием Java Generics, вы можете сохранить некоторые объекты внутри цикла while.
List<String> list = new ArrayList<>(); list.add("first"); list.add("second"); list.add("third"); Iterator<String> iterator = list.iterator(); while(iterator.hasNext()){ String obj = iterator.next(); }
Итерация списка с использованием цикла For-Each
Второй способ итерации List – использовать цикл for.
List list = new ArrayList(); list.add("first"); list.add("second"); list.add("third"); for(Object element : list) { System.out.println(element); }
Цикл for выполняется один раз для каждого элемента. Внутри цикла for каждый элемент, в свою очередь, связан с переменной obj.
Можно изменить тип переменной внутри цикла for.
List<String> list = new ArrayList<String>(); //add elements to list for(String element : list) { System.out.println(element); }
Итерация списка с помощью цикла For
Третий способ итерации List – использовать стандартный цикл for, подобный следующему:
List list = new ArrayList(); list.add("first"); list.add("second"); list.add("third"); for(int i=0; i < list.size(); i++) { Object element = list.get(i); }
Цикл for создает переменную int и инициализирует ее 0. Затем она зацикливается, пока переменная int i меньше размера списка. Для каждой итерации переменная i увеличивается.
Внутри цикла for обращаемся к элементам List с помощью метода get (), передавая в качестве параметра переменную i.
Опять же, если список напечатан с использованием Java Generics, например, для для строки, то вы можете использовать универсальный тип списка в качестве типа для локальной переменной, которая присваивается каждому элементу списка во время итерации.
List<String> list = new ArrayList<String>(); list.add("first"); list.add("second"); list.add("third"); for(int i=0; i < list.size(); i++) { String element = list.get(i); }
Тип локальной переменной внутри цикла for теперь String. Поскольку список обычно типизируется как String, он может содержать только объекты String.
Следовательно, компилятор знает, что только метод String может быть возвращен из метода get (). Поэтому вам не нужно приводить элемент, возвращенный get (), в String.
Перебор списка с использованием API Java Stream
Четвертый способ итерации через API Java Stream. Для итерации вы должны сначала получить поток из списка. Получение потока из списка в Java выполняется путем вызова метода Liststream ().
List<String> stringList = new ArrayList<String>(); stringList.add("abc"); stringList.add("def"); Stream<String> stream = stringList.stream();
Как только вы получили поток из списка, вы можете выполнить итерацию потока, вызвав его метод forEach ().
List<String> stringList = new ArrayList<String>(); stringList.add("one"); stringList.add("two"); stringList.add("three"); Stream<String> stream = stringList.stream(); stream .forEach( element -> { System.out.println(element); });
Вызов метода forEach () заставит Stream выполнить внутреннюю итерацию всех элементов потока.
Оцени статью
Оценить
Средняя оценка / 5. Количество голосов:
Видим, что вы не нашли ответ на свой вопрос.
Помогите улучшить статью.
Спасибо за ваши отзыв!
Пробежаться по строке
Строку можно рассматривать как массив символов.
Пробежаться по всей строке без использования индекса.
Пробежаться по всей строки с использованием индекса.
Саму строку можно предварительно явно перевести в массив символов.
Можно вызывать forEach.
Если вам нужен не только символ строки, но и его индекс, то вызываем forEachIndexed.
Если нужно получить отдельный символ строки по индексу без перебора всей строки, то просто указываем нужный индекс.
Если вы укажете несуществующий индекс, то получите исключение StringIndexOutOfBoundsException, поэтому делайте проверку.
Рассмотрим пример с числами. Допустим нужно произвести арифметические действия с целыми числами и вывести результат в строке.
Снова используем знак доллара, а действия с числами поместили в фигурные скобки. Kotlin сама разберётся с типами данных и сделает всю работу.
Выведем второй элемент массива.
Опять используем знак доллара и фигурные скобки.
Можно даже использовать условие.
Многострочный текст можно создать, используя тройные кавычки. Больше нам не нужны символы перевода строки \n, а также символы типа \t, \b, \r и т.д.
Метод trimMargin() позволяет убрать «пустые» символы из текста по разделителю | (по умолчанию):
На выходе получим.
Можно задать свой собственный разделитель и указать его в методе.
Если первая и последняя строки длинного предложения пустые, то они будут удалены и строки.
Можем делать со строкой знакомые операции в удобной обёртке.
Срезы (slices)
Срез (slice) — извлечение из данной строки одного символа или некоторого фрагмента
подстроки или подпоследовательности.
Есть три формы срезов. Самая простая форма среза: взятие одного символа
строки, а именно, — это срез, состоящий из одного символа,
который имеет номер , при этом считая, что нумерация начинается
с числа 0. То есть если , то
, , ,
, .
Номера символов в строке (а также в других структурах данных: списках, кортежах)
называются индексом.
Если указать отрицательное значение индекса, то номер будет отсчитываться
с конца, начиная с номера . То есть ,
, , ,
.
Или в виде таблицы:
Строка S | H | e | l | l | o |
Индекс | S | S | S | S | S |
Индекс | S | S | S | S | S |
Если же номер символа в срезе строки больше либо равен ,
или меньше, чем , то при обращении к этому символу строки произойдет
ошибка .
Срез с двумя параметрами:
возвращает подстроку из символов,
начиная с символа c индексом ,
то есть до символа с индексом , не включая его.
Например, , то же самое получится
если написать . Можно использовать как положительные,
так и отрицательные индексы в одном срезе, например, —
это строка без первого и последнего символа (срез начинается с символа с индексом 1 и
заканчиватеся индексом -1, не включая его).
При использовании такой формы среза ошибки
никогда не возникает. Например, срез
вернет строку , таким же будет результат,
если сделать второй индекс очень большим, например,
(если в строке не более 100 символов).
Если опустить второй параметр (но поставить двоеточие),
то срез берется до конца строки. Например, чтобы удалить
из строки первый символ (его индекс равен 0, то есть
взять срез, начиная с символа с индексом 1), то можно
взять срез , аналогично
если опустиить первый параметр, то срез берется от начала строки.
То есть удалить из строки последний символ можно при помощи среза
. Срез совпадает с самой строкой
.
Использование Регулярного Выражения
Мы также можем удалить последний символ (или любое количество символов) из строки |, хорошо используя регулярные выражения.
Например, мы можем использовать метод replaceAll() самого класса String , который принимает два параметра: регулярное выражение и замену String
TEST_STRING.replaceAll(".$", "");
Обратите внимание, что, поскольку мы вызываем метод на String – операция, конечно, небезопасна для null|/. Кроме того, replace All() и выражение регулярного выражения может быть сложным на первый взгляд
Вы можете прочитать больше о регулярном выражении здесь , но чтобы сделать логику немного более удобной для пользователя, мы можем обернуть ее в вспомогательный класс:
Кроме того, replace All() и выражение регулярного выражения может быть сложным на первый взгляд. Вы можете прочитать больше о регулярном выражении здесь , но чтобы сделать логику немного более удобной для пользователя, мы можем обернуть ее в вспомогательный класс:
public static String removeLastCharRegex(String s) { return (s == null) ? null : s.replaceAll(".$", ""); }
Обратите внимание, что если строка | заканчивается новой строкой, то описанный выше метод завершится ошибкой, так как “. ” в регулярном выражении соответствует любому символу, за исключением терминаторов строк
Наконец, давайте перепишем реализацию с Java 8 :
public static String removeLastCharRegexOptional(String s) { return Optional.ofNullable(s) .map(str -> str.replaceAll(".$", "")) .orElse(s); }
Подсписок списка
Метод subList () может создавать новый List с подмножеством элементов из исходного List.
Метод subList () принимает 2 параметра: начальный индекс и конечный индекс. Начальный индекс – это индекс первого элемента из исходного списка для включения в подсписок.
Конечный индекс является последним индексом подсписка, но элемент в последнем индексе не включается в подсписок. Это похоже на то, как работает метод подстроки Java String.
List list = new ArrayList(); list.add("element 1"); list.add("element 2"); list.add("element 3"); list.add("element 4"); List sublist = list.subList(1, 3);
После выполнения list.subList (1,3) подсписок будет содержать элементы с индексами 1 и 2.
Преобразовать list в set
Вы можете преобразовать список Java в набор(set), создав новый набор и добавив в него все элементы из списка. Набор удалит все дубликаты.
Таким образом, результирующий набор будет содержать все элементы списка, но только один раз.
List list = new ArrayList(); list.add("element 1"); list.add("element 2"); list.add("element 3"); list.add("element 3"); Set set = new HashSet(); set.addAll(list);
Обратите внимание, что список содержит элемент String 3 два раза. Набор будет содержать эту строку только один раз
Таким образом, результирующий набор будет содержать строки: , and .
Общие списки
По умолчанию вы можете поместить любой объект в список, но Java позволяет ограничить типы объектов, которые вы можете вставить в список.
List<MyObject> list = new ArrayList<MyObject>();
Этот список теперь может содержать только экземпляры MyObject. Затем вы можете получить доступ к итерации его элементов без их приведения.
MyObject myObject = list.get(0); for(MyObject anObject : list){ //do someting to anObject... }
Форматирование строк
Предположим у нас есть строковый ресурс:
Чтобы вывести эту строку программно в элементе TextView, можно использовать код:
Представьте себе, что у вас несколько котов. Можно, конечно, завести для каждого кота свою строку. Но ведь строки очень похожи, меняются только имена и возраст. Также можно менять число лап и хвостов (что вы курите?).
В таких случаях можно применить форматирование строк. Нужно определить слова, которые мы будем менять и заменить их на специальный набор символов, которые начинаются с символа процента, затем идет число, увеличивающееся на единицу, далее $s для строк или $d для чисел. Итак, изменим наш строковой ресурс так:
Внесём изменения в код:
Если вас есть кот Васька и ему шесть лет, то добавляем две переменные и форматируем строку
Здесь показан простейший пример с форматированием. Помните о нём и применяйте в нужных местах.
Галантерея! Решить проблему невозможности разрешения метода «XXXXX (java.lang.String)» в проекте в IDEA
s http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>tyle=»clear:both;»>
Вы столкнулись с этой проблемой?
Изначально использовал Myeclipse, позже перешел на IDEA, различные проблемы не решаются, эта проблема одна из них.
У него также есть проблема с братом:
Рисунок выше — это скриншот кода после решения.
Решение:
1. Очистите кеш
Нажмите «Файл» в верхнем левом углу —-> «Недействительные кеши / перезагрузка».
В появившемся диалоговом окне нажмите «Invalidate».
Если этот метод не работает, обратитесь ко второму способу.
2. Добавьте кота
Нажмите «Файл» в верхнем левом углу ——> Структура проекта
В новом диалоговом окне нажмите «Модули» —-> «+» —-> «Библиотека или зависимость модуля ..»
Появится диалоговое окно, выберите кот ——> нажмите «Добавить выбранное».
Нажмите «Применить» —-> «ОК»
3. Альтернативный метод
Если вы не можете решить эту проблему, попробуйте вернуться к методу 1: «Файл» —-> «Недействительный кеш / перезапуск» —-> во всплывающем диалоговом окне нажмите «Недействительность и перезапуск».
Хорошо, на данный момент моя проблема решена.
Срок решения: два дня
Решение: сначала устраните проблему, чтобы найти причину, а затем слепо измените ее и продолжайте попытки и ошибки. В то же время браузер ищет похожие проблемы и, наконец, решает их.
Интеллектуальная рекомендация
1. Для реальных сигналов (для понимания): A (ω) является соотношением амплитуды выходного сигнала и амплитуды входного сигнала, называемого частотой амплитуды. Φ (ω) — это разница межд…
Один. вести Многие люди задавали некоторые вопросы о создании проекта Flex + LCDS (FDS) в сообщениях и группах. Из-за операции ее трудно четко объяснить, поэтому я написал простой учебник (я обещал эт…
package com.example.phonehttp; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.widget.ScrollView; import android.widget.TextView; public class MainActi…
Он предназначен для реализации подкласса того же родительского класса с родительским классом. Полиморфизм Один и тот же ссылочный тип использует разные экземпляры для выполнения разных операций; Идея …
тема: Объедините два упорядоченных слоя в новый заказанный список и возврат. Новый список состоит из всех узлов двух связанных списков, данных сплавным. Пример: Анализ: два связанных списка состоит в …
Вам также может понравиться
D. Самая ценная строка Пример ввода 2 2 aa aaa 2 b c Образец вывода aaa c На самом деле, будучи задетым этим вопросом, вы должны быть осторожны. После инвертирования строки, если две строки имеют один…
Given a 2D integer matrix M representing the gray scale of an image, you need to design a smoother to make the gray scale of each cell becomes the average gray scale (rounding down) of all the 8 surro…
calc () может быть очень незнакомым для всех, и трудно поверить, что calc () является частью CSS. Поскольку он выглядит как функция, почему он появляется в CSS, поскольку это функция? Этот момент такж…
Основываясь на дереве регрессии, сформированном CART, а также на предварительной и последующей обрезке дерева, код выглядит следующим образом:…
Откат Обновление в режиме онлайн с версии Centos (CentOS Linux версии 7.3.1611 (Core) до CentOS Linux версии 7.5.1804 (Core)) # ошибка соединения yum-ssh после обновления yexpected key exchange group …
Заключение
Вкратце содержание рассмотренной серии статей можно выразить так:
- В ряде случаев применение допустимо. Не бойтесь его использовать там, где он имеет смысл как часть моделирования заданной области.
- Минимизируйте использование и не применяйте там, где другие его не ждут — следите за интерфейсом между методами.
- Не задействуйте для неявного указания ошибок — лучше выбрасывайте явное исключение.
- Используйте перегрузку метода и шаблон для избежания передачи -значений в вызовы метода.
- Никогда не присваивайте переменной типа коллекции значение — используйте для создания пустых структур данных.
- При возврате пустых значений используйте вместо , чтобы вызывающие ожидали пустое значение и обеспечивали для него соответствующую обработку.
- При невозможности применить — явно выразите ваши намерения обработки/не обработки -параметров и возвращения/не возвращения в методах при помощи аннотаций .
- Используйте для намеренного провала при нежелательных -параметрах.
- Высматривайте коварные -строки и используйте класс и библиотеку для изящной обработки .
- Java. Вложенные классы
- Портируем решатель судоку с Java на WebAssembly
- Синхронизация в Java. Часть 1
Читайте нас в Telegram, VK и
Перевод статьи Jens Christian B. Madsen: Part 2: Avoiding Null-Pointer Exceptions in a Modern Java Application