Collection集合的总结与可变参数

一:总结

1.希望记住元素的添加顺序,需要存储重复的元素,又要频繁的根据索引查询数据推荐使用ArrayList集合(有序,可重复,有索引),底层是基于数组的。

2.希望记住元素的添加顺序,且增删首尾数据情况较多推荐使用LinkedList集合(有序,可重复,有索引),底层基于双链表实现的。

3.不在意元素顺序,也没有重复元素需要存储,只希望增删改查都快推荐使用HashSet集合(无序,不重复,无索引),底层基于哈希表实现的。

4.希望记住元素的添加顺序,业内有重复元素需要存储,且希望增删改查都快推荐使用LinkedHashSet集合(有序,不重复,无索引),底层基于哈希表和双链表。

5.如果要对元素进行排序,也没有重复元素需要存储,且希望增删改查都快推荐使用TreeSet集合,基于红黑树实现。

二:注意实现:集合的并发修改异常问题

1.使用迭代器遍历集合时,又同时在删除集合中的数据,程序就会出现并发修改异常的错误。

2.由于增强for循环遍历集合就是迭代器遍历集合的简化写法,因此,使用增强for循环遍历集合,又同时删除集合中的数据时,程序也会出现并发修改异常的错误。(forEach也会出现并发修改异常问题)

3.如何保证遍历集合同时删除数据不出bug?

①使用迭代其遍历集合,但用迭代器自己的删除方法删除数据即可。

②如果能用for循环遍历是:可以倒着遍历并删除;或者从前往后遍历,但删除元素后做i--的操作。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Attention {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("迈克杰克逊");
        list.add("许嵩");
        list.add("周杰伦");
        list.add("黑屋乐队");
        list.add("张杰");

        Iterator<String> it = list.listIterator();
        while (it.hasNext()){
            String ele = it.next();
            if (ele.contains("杰")){
                it.remove();//删除迭代器当前遍历的对象,每删除一个数据之后相当于在底层也做了for循环中的i--
            }
        }
        System.out.println(list);
    }
}

---------------------------------------------------------------------------------------------------------------------------------

可变参数

一:就是一种特殊形参,定义在方法,构造器的形参列表里,格式是:数据类型...参数名称;

二:可变参数的特点和好处

1.特点:可以不传数据1给它;可以传一个或同时传多个数据给它;也可以传一个数组给它。

2.好处:常常用来灵活的接受数据。

3.示例:

import java.util.Arrays;

public class ChangeableNumber {
    public static void main(String[] args) {
        go(45);
        go(123,456,56,56,645);
        go(new int[]{12,123,432,435,654});
    }
    //注意事项1:一个形参列表中,只能有一个可变参数。
    //注意事项2:可变参数必须放在形参列表的最后面。
    public static void go(int...num){
        //可变参数在方法内部 本质就是一个数组
        System.out.println(num.length);
        System.out.println(Arrays.toString(num));
        System.out.println("---------------------------------");
    }
}

注意事项1:一个形参列表中,只能有一个可变参数。

注意事项2:可变参数必须放在形参列表的最后面。

注意事项3:可变参数在方法内部 本质就是一个数组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值