Может изменить не ключевую часть объекта, хранящегося в множестве в C ++. Как сделать подобное в Java?

0

C++

Скажем, мы вставляем 5 объектов в набор. Каждый объект имеет идентификатор и имя в качестве атрибутов. Мы можем получить итератор для элемента, который мы ищем, например

int main()
{
   set<Obj*> setObj;
   Obj *objA = new Obj(10,"P"); Obj * objB = new Obj(20,"L");
   setObj.insert(objA);setObj.insert(objB);
   set<Obj*>::iterator it = setObj.find(objA);
   if( it > 0 )
       it->name = "New name";
}

//Надеемся, что идея понятна. В основном я могу изменить не ключевую часть объекта в наборе. В этом случае класс obj имеет ключ как id

Теперь в Java, так как у нас нет набора предложений find, это единственный способ сделать это, перейдя через?

извините, если синтаксис не совсем прав. Хавент скомпилировал код

  • 0
    Да, вам придется пройти через это, вызывая iterator() . stackoverflow.com/questions/7283338/...
  • 6
    Приведенный выше код не делает в C ++ то, что вы думаете: код использует std::set<Obj*> упорядоченный по значениям указателя. Если вы хотите отсортировать объекты по их id вам нужно использовать пользовательский объект сравнения. Кроме того, вы не можете сравнить итераторы с 0 вам нужно сравнить итератор с end() набора.
Показать ещё 3 комментария
Теги:

2 ответа

-2
Лучший ответ

Java Set не использует метод поиска hava. Он содержит только (Object o) и containsAll (Collectiono) метод. Вы должны выполнить итерацию набора, потому что набор Java не имеет последствий. Индекс - глупость.

1

Набор в Java предназначен для уникальных, неизменных элементов.

Если вы хотите иметь переменные значения, связанные с ключом, вы должны использовать карту. BTW Большинство установочных реализаций просто завершают карту.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню