поиск в java ArrayList

Массив - это указатель. Различия между * (разыменование) и & amp; (addressof) операторов и когда использовать оба

И подчеркивают, что лучшее (и действительно единственное) реальное место для C в наши дни - это встроенные системы и приложения реального времени, где ресурсы ограничены, а время выполнения является фактор.

Я не очень ценил C как язык, пока не взял класс встроенных микропроцессорных систем, и мы реализовали аппаратное обеспечение, прочитав руководство программиста в руководстве к плате Motorolla Dragonball. Следовательно, если это вообще возможно (что может быть сложно, так как вам понадобится дешевое оборудование), попытайтесь заставить их работать над аналогичными проектами (реализация таблиц UART и векторов прерываний и т. Д.) ...

Поскольку такие вещи, как обработка строк, сортировка и т. Д., Являются игрушечными задачами классической школы, они на самом деле уже не так полезны и расстраивают учащихся, которые знают, что существуют более простые способы. Это намного более полезно для & amp; байт с битовой маской и смотреть, как загорается светодиод.

О, и я никогда не узнал о том, как использовать такие вещи, как gcc в школе, или что на самом деле происходит с make-файлами. Прагматичные программисты говорят, что это полезно знать.

17
задан Jon Skeet 12 June 2009 в 06:34
поделиться

5 ответов

Компилятор жалуется, потому что у вас в настоящее время есть блок if (exist) внутри цикла for. Это должно быть вне его.

for(int i=0;i<this.customers.size();i++){
        if(this.customers.get(i).getId() == id){
            exist=true;
            break;
        }
}

if(exist) {
    return this.customers.get(id);
} else {
    return this.customers.get(id);
}

Тем не менее, есть лучшие способы выполнить этот поиск. Лично, если бы я использовал ArrayList, мое решение было бы похоже на то, что опубликовал Джон Скит.

17
ответ дан 30 November 2019 в 09:57
поделиться
Customer findCustomerByid(int id){
    for (int i=0; i<this.customers.size(); i++) {
        Customer customer = this.customers.get(i);
        if (customer.getId() == id){
             return customer;
        }
    }
    return null; // no Customer found with this ID; maybe throw an exception
}
11
ответ дан 30 November 2019 в 09:57
поделиться

Лично я сейчас редко пишу циклы, когда мне это сходит с рук ... Я использую общие библиотеки Jakarta:

Customer findCustomerByid(final int id){
    return (Customer) CollectionUtils.find(customers, new Predicate() {
        public boolean evaluate(Object arg0) {
            return ((Customer) arg0).getId()==id;
        }
    });
}

Ура! Я сохранил одну строчку!

16
ответ дан 30 November 2019 в 09:57
поделиться

Вам не хватает оператора return, потому что, если размер вашего списка равен 0, цикл for никогда не будет выполняться, поэтому if никогда не будет выполняться, и, следовательно, вы никогда не вернетесь.

Move оператор if вне цикла.

2
ответ дан 30 November 2019 в 09:57
поделиться

Другие указали на ошибку в вашем существующем коде, но я хотел бы сделать еще два шага. Во-первых, предполагая, что вы используете Java 1.5+, вы можете добиться большей читабельности с помощью расширенного цикла for :

Customer findCustomerByid(int id){    
    for (Customer customer : customers) {
        if (customer.getId() == id) {
            return customer;
        }
    }
    return null; 
}

Это также устранило микрооптимизацию возврата null перед циклом - Сомневаюсь, что вы получите от этого какую-то пользу, да и больше кода. Точно так же я удалил флаг exists : возврат, как только вы узнаете ответ, упрощает код.

Обратите внимание, что в вашем исходном коде я думаю , что у вас была ошибка. Обнаружив, что у клиента с индексом i был правильный идентификатор, вы затем вернули клиента с индексом id - я сомневаюсь, что это действительно то, что вы намеревались.

Во-вторых, если ты'

55
ответ дан 30 November 2019 в 09:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: