ConcurrentSkipListSet вставка Java 6

129
11 июня 2019, 07:10

Вопрос по ConcurrentSkipListSet в Java 6

Есть такой вот код. После вставки в сет результат имеет такой вид:

sout user.getId(): 12 15 12

Почему так? Ведь должен быть 12, 15.

 сlass Comp implements Comparator<UserModelTmp>
    {
        @Override
        public int compare(UserModelTmp o1, UserModelTmp o2)
        {
            if (o1.getUserId() == o2.getUserId())
            {
                return 0;
            }
            return o2.getTime().compareTo(o1.getTime());
        }
    }

Set<UserModelTmp> set = new ConcurrentSkipListSet<UserModelTmp>(new Comp());
private void add()
{
  set.add(new UserModelTmp(12, System.currentTimeMillis()));
  set.add(new UserModelTmp(12, System.currentTimeMillis()+122));
  set.add(new UserModelTmp(15, System.currentTimeMillis()+144));
  set.add(new UserModelTmp(12, System.currentTimeMillis()+166));
}
public class UserModelTmp
{
    int userId;
    Long time;
    public UserModelTmp(int userId, long time)
    {
        this.userId = userId;
        this.time = time;
    }

    public UserModelTmp(int userId)
    {
        this.userId = userId;
        this.time = 0L;
    }
    public int getUserId()
    {
        return userId;
    }
    public void setUserId(int userId)
    {
        this.userId = userId;
    }
    public Long getTime()
    {
        return time;
    }
    public void setTime(long time)
    {
        this.time = time;
    }
    @Override
    public boolean equals(Object o)
    {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        UserModelTmp that = (UserModelTmp) o;
        return userId == that.userId;
    }
    @Override
    public int hashCode()
    {
        return userId;
    }
}
Answer 1

Если вы хотите добавлять только уникальных по id UserModelTmp, необходимо изменить компоратор, например:

class Comp implements Comparator<UserModelTmp> {
    @Override
    public int compare(UserModelTmp o1, UserModelTmp o2) {
        return o1.getUserId() - o2.getUserId();
    }
}

Я бы еще изменил hashCode

@Override
public int hashCode() {
   return Objects.hash(userId);
}
READ ALSO
Выровнять текст по центру и левому краю

Выровнять текст по центру и левому краю

Необходимо сверстать адаптивный блок в котором текст будет в центре и выровнен по левому краюТакая вот простая задачка, решение которой...

151
мини Script не работает

мини Script не работает

Programing language: JavaScript

105
Как изменить цвет заливки svg при onScroll?

Как изменить цвет заливки svg при onScroll?

Могу ли я изменить цвет заливки логотипа SVG при onScroll? Это возможно с html или свойством css? Изменение цвета должно быть при прокрутке, когда...

161
Для чего нужен package-lock.json?

Для чего нужен package-lock.json?

Доброе время сутокЯ почитал документацию к NPM, почитал форумы, но всё равно до конца не совсем понимаю, смысловую нагрузку этого файла

161