JavaSE-Day22-集合进阶单列集合

01单列结合顶层接口

1.Collection顶层接口图

2Collection的简单使用

public class ColletionDemo1 {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();

        //1.添加元素
        //细节1:添加失败换返回false,成功true
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
       // System.out.println(coll);

        //2.从集合中移除元素
        //coll.clear();
       // System.out.println(coll);

        //3.删除一个
        //System.out.println(coll.remove("aaa"));
       // System.out.println(coll);
        System.out.println(coll.contains("ccc"));

    }
}

当集合中里面使用自定义对象内容,实际需要需要比较对象内容的值时,需要重写equals方法,原因是Object的equals方法比较的是地址值而不是本身的内容。重写equals方法,在自定义的类中,右键->生成->含有equals的选项,next到底就可以了。这是一个比较的小细节,字符串acd和acD的hashCode值是一样的。

3.Collection与Collections的区别

        前者是单列集合的顶层接口是接口,后者是工具类,它的addAll()方法一次性可以添加多个元素,使用便捷。

02集合的5遍历方法

1迭代器遍历:使用迭代器只能用于遍历不能用于其他的,又分为迭代器和集合迭代器,迭代器适合适合删除元素使用,集合迭代器适合添加元素使用,这里添加和删除使用的迭代器对象。

2.增强for循环遍历

3.forEach遍历

3.lambda表达式的forEach遍历

5.普通for循环遍历

public class ListDemo3 {
    public static void main(String[] args) {
        //1list集合的常见操作
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        // System.out.println(list);


        //1.list集合中的五种遍历方式
        //迭代器 适合遍历删除元素时,使用

        Iterator<String> it = list.iterator();
        while (it.hasNext()){
            String str = it.next();
            if ("bbb".equals(str)){
  
              //  it.remove();
                list.remove("bbb");
            }
            //System.out.println(str);
        }
        System.out.println(list);
        //2.集合迭代器 适合 遍历添加元素时使用
/*        ListIterator<String> it2 = list.listIterator();
        while (it2.hasNext()){
            String str = it2.next();
            if ("bbb".equals(str)){
                //这个参加如期出现错误
                //list.add("QQQ");
                //后面这个添加还是有问题
                it2.add("QQQ");
            }
            System.out.println(str);
        }*/

        /*现象:使用迭代器添加后的元素不能在迭代器遍历显示
        * 在循环之外打印list会出现结果*/
       // System.out.println(list);



        //3.增强for循环
      /*  for(String l:list ){
            System.out.println(l);
        }*/
        //4.lambda表达式的增强for循环

        //foreach方法的底层其实就是一个循环遍历,一次得到集合中的每一个元素
        //并把每一个元素传递给下面的accept方法。
      /*  list.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });*/
        //list.forEach(s -> System.out.println(s));

        //5.普通for 结合索引

    }
}

03常见的数据结构(栈、队列、数组、链表)

栈:先进先出FILO

队列:FIFO先进先出

链表:分为单链表和双链表,带头结点和不带头节点

04ArrayList源码分析

底层原理:数组+链表+红黑树(jdk1.8及以后),当数组长度大于64且链表挂载为8时,链表转变为红黑树。

创建时数组长度为空,添加数据时才开始扩容,添加第一个元素,开辟数据为10,当数据添加到第11时个,开始扩容,扩容5个或者添加集合的长度。

源码1:

方法newLength对minGrowth与preGrowth,进行了一次比较,这是因为add方法可以添加集合,当我们添加集合长度为1000时,不比较扩容5个是不合适的,因此要进行比较。

05LinkedList和迭代器源码分析

基本数据结构使用的双指针

指针变量意思的理解:

        node和node.next都是一个指针,node指向当前节点,node.next指向节点的下一位

node=node.next就是指针后移一位。

06Iterator源码分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值