import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* 去掉重复值(保留一个或一个不留)
* @author mask-fish
*
*/
public class RemoveRepetition {
public static void main(String[] args) {
//1.去掉重复的字符串,并保留一个;
String aa = "qq,ww,ee,qq,rr,tt,qq";
String[] aaArray = aa.split(",");//字符串,转化为数组;
System.out.println("aaArray:" + aaArray);
HashSet<String> hs = new HashSet<String>();
for (String s : aaArray) {
hs.add(s);
}
Iterator<String> iterator = hs.iterator();
if (iterator.hasNext()) {
/* 必须要加上转义符\\
public String replaceAll(String regex, String replacement);regex -- 匹配此字符串的正则表达式
成功则返回替换的字符串,失败则返回原始字符串。*/
String aa2 = hs.toString().replaceAll("\\[", "").replaceAll("\\]", "");//去除相同项的字符串;
System.out.println("aa2(String):"+aa2);//ee, ww, tt, rr, qq(那么如何把重复的值完全去掉,一个qq都不留呢?)
}
//2.完全去除重复,一个不留
//1)第一种:把数组变成list
List<String> aaList = new ArrayList<>();
for (String aa_ : aaArray) {
aaList.add(aa_);
}
System.out.println("aaList:"+aaList);
System.out.println(check(aaList));
//2)第二种:把数组变成list
List<String> list = Arrays.asList(aaArray);
System.out.println(check(list));
}
/**
* list集合去重(一个不留)
* @param list
* @return
*/
private static List<String> check(List<String> list) {
Map<String, Integer> map = new HashMap<>();
for (String s : list) {
if (map.get(s) == null) {//public V get(Object key):该方法调用返回指定键所映射的value值,或者null(如果此映射不包含该键)。
map.put(s, 1);//put方法插入数据;
} else {
map.put(s, map.get(s) + 1);//put()方法插入的key值不能重复,否则value值覆盖前面key键映射的value值;
}
}
System.out.println("map:" + map);
System.out.println("map.keySet():"+ map.keySet());
List<String> resultList = new ArrayList<>();
for (String key : map.keySet()) {//读取map;keySet():将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通过get()取key
if (map.get(key) == 1) {
resultList.add(key);
}
}
return resultList;
}
}
由于是小白,曾经遇到一个这样的笔试题不会,所以就记录一下,也是第一次写博客!!!
字符串、数组、list集合去除重复值(留一个或一个不留)
最新推荐文章于 2023-05-07 08:36:42 发布