摘要
记录一些关于Java的集合类使用方式或者细节相关问题
一、初始化
1、在List创建的时候就初始化一些元素
List<String> stringList = new ArrayList<>(Arrays.asList("a", "b"));
二、遍历
1、基本List遍历
(1)通过下标形式遍历
List<Integer> integerList = new ArrayList<>(Arrays.asList(1, 2, 3));
for (int i = 0; i < integerList.size(); i++) {
System.out.print(integerList.get(i) + " ");
}
(2)直接foreach循环遍历
List<Integer> integerList = new ArrayList<>(Arrays.asList(1, 2, 3));
// 通过foreach循环
for (Integer item : integerList) {
System.out.print(item + " ");
}
(3)通过迭代器遍历
List<Integer> integerList = new ArrayList<>(Arrays.asList(1, 2, 3));
// 通过迭代器遍历
Iterator it = integerList.iterator();
while (it.hasNext()) {
System.out.print(it.next() + " ");
}
三、删除
1、使用Iterator删除
/**
* 删除某个已知元素,使用Iterator迭代器遍历删除
*/
@Test
public void deleteElementsByIt() {
// 删除值为2的元素
List<Integer> numList = new ArrayList<>(Arrays.asList(1, 2, 2, 3, 4, 5, 6));
Iterator iterator = numList.iterator();
while (iterator.hasNext()) {
if (iterator.next().equals(2)) {
iterator.remove();
logger.info("The element is 2, remove.");
}
}
logger.info("numList = {}", Arrays.toString(numList.toArray()));
}
2、使用下标删除
/**
* 删除某个已知元素,由于list删除当前元素以后,该元素之后的另一个元素会占据当前元素下标,所以采用下标遍历记得回退
*/
@Test
public void deleteElements() {
// 删除值为2的元素
List<Integer> numList = new ArrayList<>(Arrays.asList(1, 2, 2, 3, 4, 5, 6));
for (int i = 0; i < numList.size(); i++) {
if (numList.get(i) == 2) {
numList.remove(i);
i--; // 下标回退
}
}
logger.info("numList = {}", Arrays.toString(numList.toArray()));
}
四、排序
@Test
public void sortElements() {
List<Date> dates = new ArrayList<>();
Date data1 = new Date();
logger.info("date1 = {}, getTime = {}", data1, data1.getTime());
Date date2 = new Date(data1.getTime() + 10000);
logger.info("date2 = {}, getTime = {}", date2, date2.getTime());
Date date3 = new Date(date2.getTime() + 10000);
logger.info("date3 = {}, getTime = {}", date3, date3.getTime());
dates.add(data1);
dates.add(date2);
dates.add(date3);
// 最早写法 从小到大
dates.sort(new Comparator<Date>() {
@Override
public int compare(Date o1, Date o2) {
return o1.compareTo(o2);
}
});
logger.info("sort1: dates = {}", Arrays.toString(dates.toArray()));
// 简化1 从小到大
dates.sort((o1, o2) -> o1.compareTo(o2));
logger.info("sort1: dates = {}", Arrays.toString(dates.toArray()));
// 简化2.1 从小到大
dates.sort(Comparator.comparing(Date::getTime));
logger.info("sort1: dates = {}", Arrays.toString(dates.toArray()));
// 简化2.2 从大到小
dates.sort((o1, o2) -> o2.compareTo(o1));
logger.info("sort2: dates = {}", Arrays.toString(dates.toArray()));
// 自然顺序,从小到大
dates.sort(Comparator.naturalOrder());
logger.info("sort1: dates = {}", Arrays.toString(dates.toArray()));
// 逆序顺序,从大到小
dates.sort(Comparator.reverseOrder());
logger.info("sort2: dates = {}", Arrays.toString(dates.toArray()));
}