我有一个很大的疑问。我想在这里找到一个不重复的字符串的第一个字符。例如,对于下面的输入应返回'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)函数?
答案 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。