Как я могу поддерживать порядок вставки при использовании HashSet? - PullRequest
1 голос
/ 04 июля 2019

Мне нужно сохранить недавно вставленный заказ в наборе.

Set<Intger> s = new HashSet<>();
s.add(1);
s.add(2);
s.add(3);
s.add(1);
print(s);

При использовании LinkedHashSet () порядок равен (1,2,3). Я хочу заказать (2,3,1). Я хотел бы эффективный способ объединить свойства набора со стеком.

Ответы [ 4 ]

0 голосов
/ 18 июля 2019

Используйте LinkedHashSet вместо Hashset для поддержания порядка вставки.

Set<Integer> s = new LinkedHashSet<Integer>();
0 голосов
/ 05 июля 2019

Это так просто, просто создайте метод для оценки набора, если он имеет значение, которое необходимо добавить, если удалите его, а затем добавьте, если не просто добавьте.

Это метод.

package exercise.setInsertionOrder;

import java.util.LinkedHashSet;
import java.util.Set;

public class SetInsertionOrder {

    public static void main(String[] args) {
        Set<Integer> s = new LinkedHashSet<>();
        /*s.add(1);
        s.add(2);
        s.add(3);
        s.add(1);*/
        addByJudgeValueIsAdded(s, 1);
        addByJudgeValueIsAdded(s, 2);
        addByJudgeValueIsAdded(s, 3);
        addByJudgeValueIsAdded(s, 1);
        System.out.println(s);
    }


    public static <T> void addByJudgeValueIsAdded(Set<T> set,T t){
        if(set.contains(t)){
            set.remove(t);
            set.add(t);
        }else{
            set.add(t);
        }
    }

}

Это результат.

[2, 3, 1]

0 голосов
/ 05 июля 2019

Как насчет этого:

Set<Integer> s = new LinkedHashSet<>();
addToSet(1, s);
addToSet(2, s);
addToSet(3, s);
addToSet(1, s);
print(s);

void addToSet(Integer v, Set<Integer> s) {
    s.remove(v);
    s.add(v);
}
0 голосов
/ 05 июля 2019
  1. Написать новый класс, который реализует интерфейс Map.Используйте состав LinkedHashSet.
  2. Реализуйте add, чтобы он проверял наличие дубликатов, удалял их и считывал их.Сопоставьте непосредственно остальные методы интерфейса с LinkedHashSet.
  3. Пишите модульные тесты и передавайте свой код в стек обмена Codereview.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...