常用的小技巧
很多时候,我们需要初始化一个集合,元素可能就是String或者Integer这种简单数据类型,最常规的方法如下:
List<String> colors = new ArrayList<String>();
colors.add("red");
colors.add("white");
colors.add("black");
但如上写法,显得繁琐,可考虑使用如下方式:
①匿名内部类的形式
List<String> list = new ArrayList<String>() {{
add("red");
add("white");
add("black");
}};
②借助Arrays.asList()方法
List<String> list = new ArrayList<String>(Arrays.asList("red", "white", "black"));
③如果只是list,不要求ArrayList,可直接使用Arrays.asList()方法,但要注意此时集合不可变
List<String> list = Arrays.asList("red", "white", "black");
④如果只是想创建不可变集合,可借助guava提供的ImmutableList
List<String> list = ImmutableList.of("red", "white", "black");
⑤如果只是想创建不可变集合,且只有一个元素,除了借助guava提供的ImmutableList,还可以使用JDK自带的Collections
List<String> list = Collections.singletonList("color");
⑥如果只是想创建某个对象的n副本集合
List<String> list = Collections.nCopies(1000, "red");
⑦自己写工具类
public static <T> ArrayList<T> createArrayList(T ... elements) {
ArrayList<T> list = new ArrayList<T>();
for (T element : elements) {
list.add(element);
}
return list;
}
List去重
方式1:循环对比,可以保持原来的顺序
List<Integer> list = new ArrayList<>(Arrays.asList(6, 2, 2, 6, 8));
for (int i = 0; i < list.size() - 1; i++) {
for (int j = list.size() - 1; j > i; j--) {
if (list.get(j).equals(list.get(i))) {
list.remove(j);
}
}
}
//去重之后
6,2,8
方式2:通过HashSet/LinkedHashSet重复元素
//使用HashSet,不保证顺序,:2,6,8
List<Integer> list = new ArrayList<>(Arrays.asList(6, 2, 2, 6, 8));
HashSet set = new HashSet(list);
list.clear();
list.addAll(set);
//使用LinkedHashSet,保证顺序,:6,2,8
List<Integer> list = new ArrayList<>(Arrays.asList(6, 2, 2, 6, 8));
HashSet set = new LinkedHashSet(list);
list.clear();
list.addAll(set);
方式3:通过新集合和list.contain(),可以保持原来的顺序
List<Integer> list = new ArrayList<>(Arrays.asList(6, 2, 2, 6, 8));
List newList = new ArrayList();
for (int i = 0; i < list.size(); i++) {
if (!newList.contains(list.get(i))) {
newList.add(list.get(i));
}
}
//newList:6,2,8
Last updated