如何从java中的字符串数组中获取数组键

时间:2015-02-11 06:27:23

标签: java arrays indexof

我有一个具有重复值的字符串数组,然后我删除了副本。现在,我需要从结果中获取数组键并将其存储到新的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中可以吗?

3 个答案:

答案 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");