我有一个具有重复值的字符串数组,然后我删除了副本。现在,我需要从结果中获取数组键并将其存储到新的int数组中。我不知道它在Java中是如何工作的,因为我搜索java时不提供数组键。请问有人帮忙吗?
这是我的代码:
static String[] temp2=new String[arraysimpanloop.size()];
static String[] temp2B4Remove=new String[temp2];
删除重复前的结果temp2:
temp2 = [1,1,3,3,3,3,3,3]; 数组索引= [0,1,2,3,4,5,6,7];
删除重复后的结果temp2:
temp2 = [1,3]; array的索引= [0,2];
我的观点是,我需要在删除重复之前获取数组键(数组的索引)。在java中可以吗?
答案 0 :(得分:1)
这是一种简单的方法:
String[] temp2 = new String[]{"1", "1", "3", "1", "3" };
List<String> values = new ArrayList<>();
List<Integer> indices = new ArrayList<>();
for( int i = 0; i < temp2.length; ++i ){
String s = temp2[i];
if( ! values.contains( s ) ){
values.add( s );
indices.add( i );
}
}
您现在可以从列表中创建数组:
String[] uniq = values.toArray(new String[values.size()]);
Integer[] inds = indices.toArray(new Integer[indices.size()]);
答案 1 :(得分:1)
那么,您想要返回第一次出现的不同项目的索引吗?
地图对于这些东西来说真的很酷,在这种情况下,你想要记住的是每个不同元素的第一次出现的时间。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DistinctValues {
public static List<Integer> distinctIndexes(String[] strings) {
// holds the mapping { string => index of first occurence of that string }
Map<String, Integer> firstOccurenceMap = new HashMap<String, Integer>();
// do a scan through all the items
for (int i = 0; i < strings.length; i++) {
// store the index position of a string only if you haven't encountered it before
firstOccurenceMap.putIfAbsent(strings[i], i);
}
return new ArrayList<Integer>(firstOccurenceMap.values());
}
public static void main(String[] args) {
String[] strings = new String[] { "1", "1", "3", "3", "3", "3", "3", "3" };
System.out.println(distinctIndexes(strings));
}
}
输出:
[0, 2]
答案 2 :(得分:0)
尝试
int index = Arrays.asList(temp2).indexOf("3");