1.如何在字符串中找到第一个不重复的字符
方法一
用LinkedHashMap来记录字符个数,因为LinkedHashMap维持的元素顺序与插入顺序一致,而我们正是按照字符串中字符出现的顺序来将字符插入Map中的。当我们扫描字符串时,只需要迭代LinkedHashMap并找出到第一个值为1的元素,那便是第一个非重复的字符。
方法二
使用HashMap,我们会在第一扫描计算各个字符的出现次数保存在HashMap中之后,再次遍历字符串并从Map中获取每个字符的个数去找到第一个不重复的字符。由于我们从左往右扫描字符,当找到某个字符的计数为1时,我们就可以跳出循环,它就是第一个非重复的字符。
2.list去重
方法一: 通过Iterator 的remove方法
public void testList() {
List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(4);
list.add(1);
list.add(2);
list.add(5);
list.add(1);
List<Integer> listTemp= new ArrayList<Integer>();
Iterator<Integer> it=list.iterator();
while(it.hasNext()){
int a=it.next();
if(listTemp.contains(a)){
it.remove();
}
else{
listTemp.add(a);
}
}
for(Integer i:list){
System.out.println(i);
}
}
方法二:直接将结果赋值给另一个List
public void testList2() {
List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(4);
list.add(1);
list.add(2);
list.add(5);
list.add(1);
List<Integer> tempList= new ArrayList<Integer>();
for(Integer i:list){
if(!tempList.contains(i)){
tempList.add(i);
}
}
for(Integer i:tempList){
System.out.println(i);
}
}
上面的方法很麻烦?现在教你一句话实现JAVA去重:
//不带类型写法
List listWithDup = new ArrayList();
List listWithoutDup = new ArrayList(new HashSet(listWithDup));
//带类型写法(以String类型为例)
List listWithoutDup = new ArrayList<>(new HashSet<>(listWithDup));
3.字符串逆序输出
方法一
String str="qwertyuiop";
// 字符串下标从0开始,长度-1结束。倒序所以从长度-1开始,0结束。
for (int i = str.length()-1; i >= 0; i--) {
System.out.print(str.charAt(i));
}
方法二
StringBuilder sb=new StringBuilder("qwertyuiop");
String s = sb.reverse().toString();
System.out.print(s);