2013-08-02 2 views
3

Представьте код, как:Как получить объект из набора, если вы знаете, что в нем есть только один объект?

Set<Car> carObject; 

Теперь я знаю, что есть только один объект в этом наборе. Как я могу получить его правильно?

Car myCar = carObject.whatMethod ? 

???

Редактировать: Спасибо за отличные ответы.

Я знаю, что есть только один объект, поскольку у меня есть чек

if(carObject.size ...) 

непосредственно перед.

ответ

10

Если вы действительно знаю, что есть один элемент:

Car myCar = carObjet.iterator().next(); 

Во всяком случае, я бы наверняка и делать:

Iterator<Car> it = carObjet.iterator(); 
if (it.hasNext()) { 
    Car myCar = it.next(); 
} 
+0

вы должны использовать один и тот же экземпляр итератора для hasNext() и следующий вызов() –

+0

@SebastianBaltes: Спасибо, это была ошибка копирования/вставки, исправлена. – jlordo

1

Поскольку набор не имеет прямого доступа к своим членам по индексу, вы должны перебирать множество, EEMS самые дешевый:

Car myCar = carObject.iterator().next(); 

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

2

Вы можете использовать массив:

Car myCar = carObject.toArray(new Car[1])[0]; 
1

Если вы знаете, ваш Set имеет n элементы, и вы хотите получить доступ к i й один:

carSet.toArray(new Car[n])[i];