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

Как сопоставлять элементы в разных списках массивов в Java

У меня есть два ArrayList: список строк и список целых чисел. Например:

Bob        2
Kevin      6
Lane       4
Susan      2
//the ArrayLists will have more elements

Я пытаюсь отсортировать целочисленный ArrayList (с MergeSort) и иметь String ArrayList, соответствующий целочисленному ArrayList, например:

Susan      2
Bob        2
Lane       4
Kevin      6

Другие ответы, с которыми я столкнулся, посоветовали использовать карту (int - это ключ, а String - значение); однако я не могу этого сделать, потому что будут дубликаты ключей.

Я читал о Multimap Гуавы; однако мне не совсем удобно включать файлы jar в пути к классам.

Есть ли другой способ сделать это?

15.06.2017

  • Я предлагаю вам создать POJO (обычный старый объект Java) с двумя значениями поля, добавить это к одному ArrayList. 16.06.2017

Ответы:


1

Пока между строками и целыми числами действительно существует какая-то значимая связь, лучший способ сделать это — создать класс Java для вашей цели, например:

public class MyClass implements Comparable<MyClass> {
    private String myString;
    private int myInt;

    public MyClass(String s, int x) {
        myString = s;
        myInt = x;
    }

    public int getInt() {
        return myInt;
    }

    public String getString() {
        return myString;
    }

    public void setInt(int x) {
        myInt = x;
    }

    public void setString(String s) {
        myString = s;
    }

    // this method is the only method defined in the Comparable<T> interface
    // and is what allows you to later do something like Collections.sort(myList)

    public int compareTo(MyClass other) {
        return myInt - other.getInt();
    }
}

А затем создайте список List<MyClass> ls = new ArrayList<MyClass>();, в который вы можете добавить экземпляры только что созданного класса.

Тот факт, что этот класс реализует интерфейс Comparable, означает, что вы можете использовать предопределенные методы сортировки Java, такие как Collections.sort(), и позволить классу Collections знать, как вы хотите, чтобы ваши объекты были отсортированы. Если вместо этого вы предпочитаете реализовать свой собственный алгоритм сортировки, реализация этого интерфейса не является обязательной, но все же является хорошей практикой.

15.06.2017

2

Одним из способов использования является действительно простая хэш-карта, например:

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;

public class ExStringArraySort {

    static HashMap<String, Integer> mapPerson = new HashMap<String, Integer>();
    static String[] prsn;

    public static void main(String[] args) {
        // Add persons
        mapPerson.put("Bob", 2);
        mapPerson.put("Kevin", 6);
        mapPerson.put("Lane", 4);
        mapPerson.put("Susan", 2);

        String[] prsn = mapPerson.keySet().toArray(new String[mapPerson.size()]);

        Arrays.sort(prsn);
        System.out.println(Arrays.toString(prsn));

        System.out.println("Print detail:");
        for (int i = 0; i < prsn.length; i++) {
            System.out.println(prsn[i]+"\t"+mapPerson.get(prsn[i]));
        }

        Arrays.sort(prsn, Collections.reverseOrder());
        System.out.println("\n"+Arrays.toString(prsn));
        System.out.println("Print detail:");
        for (int i = 0; i < prsn.length; i++) {
            System.out.println(prsn[i]+"\t"+mapPerson.get(prsn[i]));
        }

    }

}

ВЫВОД:

[Bob, Kevin, Lane, Susan]
Print detail:
Bob 2
Kevin   6
Lane    4
Susan   2

[Susan, Lane, Kevin, Bob]
Print detail:
Susan   2
Lane    4
Kevin   6
Bob 2
16.06.2017
Новые материалы

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

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

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

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

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

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

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