Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 0
Регистрация: 11.02.2015
Сообщений: 24

Как отсортировать массив объектов

29.06.2015, 19:56. Показов 1585. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть класс Animal от него унаследованы классы Dog и Fish.
Есть ArrayList<Animal> animalList;
в animalList находятся по 10 объектов Dog и Fish.
Как рассортировать объекты в animalList на листы ArrayList<Dog> и ArrayList<Fish>.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.06.2015, 19:56
Ответы с готовыми решениями:

Как отсортировать массив объектов по GregorianCalendar?
Есть класс WorkDay (1): public class WorkDay { private GregorianCalendar date; public GregorianCalendar getDate() { return date; } ...

Как отсортировать массив объектов не по String а по вторым числам
Подскажите пожалуйста а как отсортировать массив объектов не по String а по вторым числам public static void main (String args) throws...

Как отсортировать массив
Можете пожалуйста помочь насчет джавки. 1.Как посчитать байт-кодов строки, которые находятся на парных позициях. 2.Дан клас Student...

8
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
29.06.2015, 20:40
Лучший ответ Сообщение было отмечено thtlol как решение

Решение

У меня их только по три, не по 10.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import java.util.ArrayList;
 
class Animal {
    String name;
}
 
class Dog extends Animal {
    Dog (String s) {
        name = s;
    }
}
 
class Fish extends Animal {
    Fish(String s) {
        name = s;
    }
}
 
class MyClass {
    public static void main(String[] args) {
        ArrayList<Animal> arrAnimal = new ArrayList<>();
        ArrayList<Dog> arrDog = new ArrayList<>();
        ArrayList<Fish> arrFish = new ArrayList<>();
 
        // добавляю в лист <Animal> животных вперемешку
        arrAnimal.add(new Dog("Sam"));
        arrAnimal.add(new Dog("Jim"));
        arrAnimal.add(new Fish("John"));
        arrAnimal.add(new Fish("Bill"));
        arrAnimal.add(new Dog("Bob"));
        arrAnimal.add(new Fish("Jack"));
 
        // сортирую животных из листа <Animal> по отдельным листам <Dog> и <Fish>
        for (Animal a: arrAnimal) {
            if (a instanceof Dog) {
                arrDog.add((Dog)a);
            } else if (a instanceof Fish){
                arrFish.add((Fish) a);
            } else {
                System.out.println(a.name+" is neither a dog or a fish.");
            }
        }
        
        // вывожу лист <Dog>
        for (Dog f: arrDog) {
            System.out.println("Dog  -> "+f.name);
        }
        
        // вывожу лист <Fish>
        for (Fish f: arrFish) {
            System.out.println("Fish -> "+f.name);
        }
    }
}
1
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
29.06.2015, 21:11
а я бы делал без instanceof
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class MainClass {
    public static void main(String[] args) {
        ArrayList<Animals> animalList = new ArrayList<>();
        ArrayList<Dog> dogList = new ArrayList<>();
        ArrayList<Fish> fishList = new ArrayList<>();
        // заполняем рыбами и собаками
        for (int i = 0; i < 20; i++) {
            if (i > 9) animalList.add(new Dog());
            else animalList.add(new Fish());
        }
        // раскидываем по отдельным спискам
        for (Animals specie : animalList) {
            if (specie.type.equals("DOG")) dogList.add((Dog) specie);
            if (specie.type.equals("FISH")) fishList.add((Fish) specie);
        }
    }
}
 
abstract class Animals {
    final String type;
 
    Animals(String type) {
        this.type = type;
    }
}
 
class Dog extends Animals {
    Dog() {
        super("DOG");
    }
}
 
class Fish extends Animals {
    Fish() {
        super("FISH");
    }
}
можно конечно вместо строк использовать и Enum, но это дело вкуса и х.з. что там за задача
1
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
29.06.2015, 21:21
Цитата Сообщение от Паблито Посмотреть сообщение
можно конечно вместо строк использовать и Enum
нужно использовать либо Enum либо константу заданную в классе. Просто строки использовать плохо. Это не дело вкуса а дело правильного построения программы.
Тоже с конструктором Animal. Надо определить абстрактный метод getType() и использовать вызывать его внутри конструктора Animal
1
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
29.06.2015, 21:27
а у меня не константа?
про getType() не согласен, потому что тип животного будет жестко зашит, там поле final
вызывать метод, там где можно обратиться к final полю считаю не рационально, да да я знаю про инкапсуляцию
личное мнение
1
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
29.06.2015, 22:04
Цитата Сообщение от Паблито Посмотреть сообщение
про getType() не согласен, потому что тип животного будет жестко зашит, там поле final
одно другого не отменяет. Поле в файнал и возвращается по вызову метода.
Цитата Сообщение от Паблито Посмотреть сообщение
specie.type.equals("DOG"))
тут "DOG" это не константа.
1
1 / 1 / 0
Регистрация: 11.02.2015
Сообщений: 24
30.06.2015, 00:25  [ТС]
Всем большое спасибо!!!
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
30.06.2015, 08:36
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
одно другого не отменяет. Поле в файнал и возвращается по вызову метода
В джаве полно классов, где часть полей-констант можно прочитать без get, далеко ходить не нужно - размер массива.
И дергание метода полюбому будет медленнее.

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
тут "DOG" это не константа
ага, надо было еще по одной строке добавить в каждый класс, что бы получилось "как надо"
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
04.07.2015, 22:08
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
нужно использовать либо Enum либо константу заданную в классе.
Поддерживаю. Как ленивый вариант:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package easybudda.dogsandcats;
 
import java.util.*;
 
public class DogsAndCats {
    
    static abstract class Animal {
        private String moniker;
 
        public Animal(String _moniker) {
            moniker = _moniker;
        }
        public String getMoniker() {
            return moniker;
        }
        abstract int getId();
    }
    
    static class Dog extends Animal {
        public Dog(String moniker) {
            super(moniker);
        }
        public int getId() {
            return 1;
        }
    }
    
    static class Cat extends Animal {
        public Cat(String moniker) {
            super(moniker);
        }
        public int getId() {
            return 2;
        }
    }
    
    public static void main(String[] args) {
        List<Animal> animals = new LinkedList<Animal>();
        animals.add(new Dog("Белка"));
        animals.add(new Cat("Барсик"));
        animals.add(new Dog("Стрелка"));
        animals.add(new Cat("Мурзик"));
        animals.add(new Dog("Шарик"));
        animals.add(new Cat("Гаф"));
        
        List<Cat> cats = new LinkedList<Cat>();
        List<Dog> dogs = new LinkedList<Dog>();
        
        for ( Animal a : animals ) {
            switch ( a.getId() ){
            case 1 :
                dogs.add((Dog)a);
                break;
            case 2 :
                cats.add((Cat)a);
                break;
            default:
                System.out.println("Alien detected!");
            }
        }
        
        System.out.println("Кошки:");
        for ( Cat c : cats )
            System.out.println(c.getMoniker());
        
        System.out.println("\nСобаки:");
        for ( Dog d : dogs )
            System.out.println(d.getMoniker());
    }
}
Enum было бы правильнее использовать, но на пару строк длиннее...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.07.2015, 22:08
Помогаю со студенческими работами здесь

Qsort() Как отсортировать массив объектов по полю объекта
Здравствуйте! Никак не могу сладить с функцией qsort(). У меня есть класс, и в нем нужно сделать сортировку по ОДНОМУ элементу...

Отсортировать массив объектов
Добрый день. Есть класс class Point { private: int x, y; public: Point() {} Point(int x1, int y1) { x = x1; y = y1; }

Отсортировать массив объектов пользовательского типа по заданному полю
3.1. Написать программу, работающую с базой данных в виде мас- сива структур и выполняющую последовательный ввод данных в мас- сив и...

В общем как заменить в подборе объектов и так чтобы не сохранял в массив объектов а в лист? с#
Вот код.public static RaycastHit rch; int _my_podbor_switch; public GameObject All_max_go_Bullet = new GameObject; public...

Где и как создать массив объектов, чтобы можно было получить доступ к методам этих объектов?
Задача: &quot;в win form кликаю на кнопку (button) и в этот момент в одном из массивов экземпляров класса должен вызваться метод&quot; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru