关于List等Java集合类

本文深入探讨了Java集合类的使用技巧,包括初始化、遍历、删除及排序等关键操作。详细介绍了不同遍历方法的优劣,展示了如何利用Iterator安全删除元素,并提供了多种排序策略的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要

记录一些关于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()));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值