2013-06-11 8 views
0

Как я могу получить уникальный идентификатор (как целое число) для списка строк?Как получить уникальный идентификатор для списка строк?

E.g. список выглядит ["Cat","Dog","Cow","Cat","Rat"] результат должен быть:

1 -> Cat 
2 -> Dog 
3 -> Cow 
4 -> Rat 

мне нужно сохранить это и новую структуру.

EDIT: Важно, что Cat - это только один раз в новой структуре.

+3

Возможно, вы можете использовать перечисление для этого? – doge

+0

Не уверен, что вы здесь. Какой тип данных вы хотите получить? Или еще лучше, предполагая, что у вас есть то, что вы хотите, покажите нам пример того, как вы его используете. – QED

ответ

4

Вы можете использовать HashMap<Integer, String>. Ключ будет индексом в вашем текущем List, тогда как значение будет фактическим String.

Пример:

List<String> myList = new ArrayList<String>(); 
// no identical Strings here 
Set<String> mySet = new LinkedHashSet<String>(); 
myList.add("Cat"); // index 0 
myList.add("Dog"); // index 1 
myList.add("Cow"); // etc 
myList.add("Cat"); 
myList.add("Rat"); 
mySet.add("Cat"); // index 0 
mySet.add("Dog"); // index 1 
mySet.add("Cow"); // etc 
mySet.add("Cat"); // index 0 - already there 
mySet.add("Rat"); 
Map<Integer, String> myMap = new HashMap<Integer, String>(); 
for (int i = 0; i < myList.size(); i++) { 
    myMap.put(i, myList.get(i)); 
} 
System.out.println(myMap); 
Map<Integer, String> myOtherMap = new HashMap<Integer, String>(); 
int i = 0; 
for (String animal: mySet) { 
    myOtherMap.put(i++, animal); 
} 
System.out.println(myOtherMap); 

Выход:

{0=Cat, 1=Dog, 2=Cow, 3=Cat, 4=Rat} 
{0=Cat, 1=Dog, 2=Cow, 3=Rat} 
+0

Но когда я использую индекс моего списка, у меня будет кошка два раза, но он должен быть там только один раз. – gurehbgui

+0

@gurehbgui, чтобы вы хотели удалить идентичные строки из своего списка перед их отображением? Или вам просто нужно удалить идентичные, нет сопоставления? ** Изменить ** в последнем случае, вы можете просто использовать HashSet вместо ArrayList , как упоминает дядя Ирох. – Mena

+1

Используйте HashSet вместо списка. –

1

Если это уникально только в рамках процесса, то вы можете использовать AtomicInteger и вызвать incrementAndGet() каждый раз, когда вам нужно новое значение.

Иначе вы можете попробовать это

int uniqueId = 0; 

int getUniqueId() 
{ 
    return uniqueId++; 
} 

Добавить синхронизированы, если вы хотите быть поточно.

1
private enum Animals { 
    Cat, 
    Dog, 
    Cow, 
    Sheep, 
    Horse 
} 

Animals.Cat.ordinal() - дает вам номер. Animals.valueOf("Cat"); - матч строк с.

+0

Это невозможно, потому что список должен быть длиннее. – gurehbgui

1
  1. построить набор, содержащий значения.
  2. построить массив, содержащий заданные значения (см. Set.toArray()).
  3. Индекс элемента в массиве является целым идентификатором для элемента.
Смежные вопросы