0

如何获取字符串列表的唯一 ID(作为整数)?

例如,列表看起来["Cat","Dog","Cow","Cat","Rat"] 应该是:

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

我需要保存这个和新的结构。

编辑:重要的是,这Cat只是新结构中的一次。

4

4 回答 4

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}
于 2013-06-11T14:41:04.150 回答
1

如果它仅在进程中是唯一的,那么您可以在每次需要新值时使用AtomicInteger并调用。incrementAndGet()

否则你可以试试这个

int uniqueId = 0;

int getUniqueId()
{
    return uniqueId++;
}

如果您希望它是线程安全的,请添加同步。

于 2013-06-11T14:42:46.377 回答
1
private enum Animals {
   Cat,
   Dog,
   Cow,
   Sheep,
   Horse 
}

Animals.Cat.ordinal()-- 给你号码。 Animals.valueOf("Cat");-- 匹配字符串。

于 2013-06-11T14:43:18.393 回答
1
  1. 构建一个包含值的集合。
  2. 构建一个包含设置值的数组(参见 Set.toArray())。
  3. 数组中项目的索引是项目的整数标识符。
于 2013-06-11T14:47:28.590 回答