Как новичок в java, должен ли я стремиться поддерживать эффективность своего кода?

#java

#java

Вопрос:

Я новичок в Java (менее месяца самостоятельного изучения), и как начинающий разработчик я хотел бы думать, что в этой теме я должен хорошо разбираться (извините меня за отсутствие терминологии здесь)

Вот мой код:

 public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);
    ArrayList<String> wordsList = new ArrayList<String>();
    while (true) {
        System.out.println("Type a word: ");
        String word = reader.nextLine();
        if (word.isEmpty()) {
            Collections.reverse(wordsList);
            System.out.println("You typed the following words: ");
            for (String wordss : wordsList) {
                System.out.println(wordss);
            }
            break;
        }
        wordsList.add(word);
    }
}
  

Я прошу прощения за плохой отступ.

В этой строке:

 for (String wordss: wordsList) 
    print(wordss)
  

Я полагаю, что я создаю совершенно новый массив строк с именем wordss, и он содержит всю идентичную информацию wordsList после его обновления. Было бы эффективнее написать цикл, который выводит каждое из слов в массиве wordsList, а не выделяет больше места для другого массива?(пожалуйста, исправьте мое невежество, где это необходимо) Лучше ли быть более простым с моим кодом?

Мой другой вопрос заключается в том, что у меня есть цикл, выполняющий проверку if после каждого ввода нового слова. Я также считаю, что это неэффективно — так что было бы лучше просто переместить проверку на после добавления слов?

Большое спасибо!

Комментарии:

1. Вы спрашиваете о разнице между обычным циклом for и циклом for-each?

2. Вы не » создаете совершенно новый массив строк «; не в последнюю очередь потому, что у вас есть ArrayList , а не a String[] . Вы зацикливаетесь на List том, что у вас уже есть.

3. Я думаю, но это не обязательно должен быть цикл for . Он будет каждый раз обновлять переменную счетчика и печатать каждый индекс массива (надеюсь, это имеет смысл, поскольку я плохо объясняю lol)

4. Что касается неэффективности, Collections.reverse(wordsList) каждый раз вызывать расточительно — я бы предложил использовать a LinkedList , который реализует Deque интерфейс, а затем вызывает Deque.addFirst метод.

5. @Kirinya » Java, поскольку это не тот язык, который следует использовать, когда эффективность действительно важна » — доказательства, пожалуйста.

Ответ №1:

Все, что вы написали, правильно. Для принятия слов и завершения необходимо внести лишь небольшую модификацию. Приведенный ниже измененный код работает для завершения, если нажать «Enter» еще раз.

 public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        List<String> wordsList = new ArrayList<String>();
        System.out.println("Type a word: ");
        while (reader.hasNextLine()) {
            System.out.println("Type a word: ");
            String word = reader.nextLine();
            wordsList.add(word);
            if (word.isEmpty()) {
                System.out.println("You typed the following words: ");
                for (String typedWord : wordsList) {
                    System.out.println(typedWord);
                }
                break;
            }
        }
    }
  

Комментарии:

1. Я не думаю, что вы ответили на вопрос, который был у OP