在我的案例中,Java ArrayList不处理字符

时间:2013-06-19 00:35:33

标签: java algorithm sorting

我有一个很大的疑问。我想在这里找到一个不重复的字符串的第一个字符。例如,对于下面的输入应返回'c'。所以这就是我计划这样做的方式。但是我注意到remove方法希望删除索引为98而不是删除对象“a”。如何强制它删除对象“a”而不是从索引中删除?

为什么这不起作用?

我该怎么做才能改变这个?

ArrayList是否始终保证按顺序存储内容?

public void findStartingLetter()
{
        String[] array={"a","b","c","d","b","a","d","d","d"};

        List<Character> list = new ArrayList<Character>();



        for(String i:array)
        {
            if(list.contains(i.charAt(0)))
                list.remove(i.charAt(0));
            else
                list.add(i.charAt(0));

        }

    }

编辑:

性能方面是否是O(n)函数?

4 个答案:

答案 0 :(得分:6)

您需要手动投射到Character,因为char会被投放到int,而list.remove((Character) i.charAt(0)); 又会被索引而不是值。

{{1}}

确保正确完成。

答案 1 :(得分:2)

  

ArrayList是否始终保证按顺序存储内容?

取决于您对订单的定义: 如果您的意思是添加它们的订单,请单击是。 如果您的意思是数字/字母顺序,那么不,但您可以使用

对其进行排序
Collections.sort(list)

这将按列表中对象的自然升序排序。

答案 2 :(得分:1)

我不完全确定您为什么要使用List,但我建议使用Set - 它保证不包含重复项。

这是第一种方法,有一套:

public Set<Character> addToSet(String[] elements) {
    Set<Character> res = new HashSet<>();
    for(String c : elements) {
        res.add(c.charAt(0));
    }
    return res;
}

现在,如果您真的希望使用List执行此操作,那么它就是类似的代码 - 您只需要在添加元素之前检查元素是否存在。< / p>

public List<Character> addUnique(String[] elements) {
    List<Character> res = new ArrayList<>();
    for(String item : elements) {
        Character c = item.charAt(0);
        if(!res.contains(c)) {
            res.add(c);
        }
    }
    return res;
}

答案 3 :(得分:0)

您解决此问题的方法非常混乱,您提出的许多问题似乎与您的问题无关。

为什么不使用:

String testString = "abcdbaddd";
Character retVal = null;
for (int i = 0; i < testString.length() -1; i++) {
    if (testString.charAt(i) == testString.charAt(i + 1)) {
        retVal = testString.charAt(i);
        break;
    }
}
return retVal;

这会让你获得第一个不重复的字符(我假设重复你的意思是重复和相邻)或者如果不存在这样的字符则为null。