Nano Hash - криптовалюты, майнинг, программирование

Детали вызова Java из списка массивов из другого класса

У меня есть 2 примера классов, чтобы попытаться лучше понять списки массивов. PersonData содержит список массивов. PersonType получит детали из списка массивов. я пытаюсь понять логику списка массивов. например, если пользователя попросят ввести идентификатор человека, как я могу вернуть письмо и возраст этого человека. как я могу получить содержимое 1 человека из списка массивов, введя значение из их списка?

public class PersonData {

    private final List<personList> personList;

    public PersonData() {  //constructor
        personList= new ArrayList<>();
        personList.add(new personList(1, 'x', 23));
        personList.add(new personList(2, 'y', 28));
        personList.add(new personList(3, 'z', 37));

    }

import java.io.Serializable;

public class PersonType implements Serializable {

    int personID;
    String personLetter;
    int personAge;

    // constructor 
    public PersonType (int pID, String pLetter, int pAge) {
        personID= pID;
        personLetter = pLetter;
        personAge= pAge;
    }

    public PersonType () {
        this(0,"",0);
    }

    public int getPersonID() {
        return (personID);
    }

    public String getPersonLetter() {
        return (personLetter );
    }

    public int getPersonAge() {
        return (personAge);
    }
} 

  • Вы имеете в виду new PersonType? Пожалуйста, публикуйте только код, который компилируется (MCVE). 06.04.2016

Ответы:


1

Самый простой подход — использовать карту вместо списка.

public class PersonData {

  private final Map<Integer,PersonType> map;

  public PersonData() {  //constructor
    map = new HashMap<>();
    map.put( 1, new PersonType(1, 'x', 23));
    map.put( 2, new PersonType(2, 'y', 28));
    map.put( 3, new PersonType(3, 'z', 37));
 }

Теперь вы можете получить конкретного человека по ID в постоянное время.

 PersonType person = map.get( 2 );

Если вы действительно хотите сохранить данные в списке, то для поиска конкретного совпадения может потребоваться линейный поиск по списку. (Если вы знаете, что он отсортирован, вы можете выполнить бинарный поиск за O(log n) стоимости.)

Вот набросок линейного поиска в списке первого подходящего элемента. (У меня нет компилятора передо мной.) Дано:

private final List<personList> personList;

Затем, чтобы найти человека в списке с совпадающим идентификатором:

int searchID = 2;

Optional<PersonType> p = personList.stream()
  .filter( p -> p.getPersonID() == searchID )
  .findFirst();
05.04.2016
  • так что списки массивов никак не могут это сделать? 06.04.2016
  • Да, вы можете сделать это со списками, но доступ к нужному элементу потребует больше усилий как для вас, так и для виртуальной машины. Я попытаюсь набросать подход с потоками. Я сейчас далеко от своего рабочего места, так что имейте в виду, что это не проверялось. 06.04.2016
  • Концептуально List<V> очень похож на Map<Integer, V>. Вы часто можете использовать List, как вы описываете. Но, как правило, это не очень хорошая идея — реализации Map обычно гораздо более эффективны для операций в стиле поиска. Исключением является случай, когда ваши ключи всегда будут последовательными положительными целыми числами (предпочтительно начиная с нуля). В этом ограниченном случае List может быть предпочтительнее. 06.04.2016
  • @userlml - Хорошо, я набросал подход к спискам. Имейте в виду, что в списке стоимость доступа к элементу по идентификатору растет линейно с количеством элементов в списке. С HashMap он остается постоянным. 06.04.2016
  • Также, если идентификаторы людей находятся в пределах короткого диапазона, вы можете напрямую использовать ArrayList и хранить/получать доступ к объекту на основе индекса (метод List.get()), который может действовать как идентификатор 06.04.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..