11集合(Collection<E>)

是一个长度可变且可以存储多个数(对象)据的容器

Collection<E>是集合的顶级接口

<E>是泛型  用于指定集合元素的数据类型,由于我们泛型的指定所以只能是引用类型

int[] arr;arr的数据类型是数组类型,arr的元素是int类型

Collection<String>c; c的数据类型是引用类型,c中的元素是String类型。

集合存储基本类型数据 1 2 4 可以自动封装成包装类 Integer in=1; in可以存储在集合中

1.Collection<E>是集合的顶级接口

        //创建集合对象
        Collection<String> c=new ArrayList<String>();
        //添加元素
        c.add("徐");
        c.add("love");
        c.add("李");
        //输出集合
        System.out.println(c); //[徐, love, 李]
        //删除元素
        c.remove("李");
        //没有要删除的元素就什么都不做
        c.remove("火");
        System.out.println(c); //[徐, love]
         //清空集合
        //c.clear();
        //判断元素是否包含在集合元素中
        System.out.println(c.contains("徐")); //true
        //判断集合中元素是否为空
        System.out.println(c.isEmpty());
        //集合元素的个数
        System.out.println(c.size());
        //返回包含此集合中所有元素的数组。返回类型是object、
        Object[] os=c.toArray();
        //在转换的过程中指明要转换的数组元素的类型
        String[] ss=c.toArray(new String[2]);

我们要谈collection下的三个子接口 list set queue

2.List(列表)是一个接口,需要实现类来实现

特征:1.存入数据有序 2.可以根据下标操作添加元素

        //创建list集合对象
        List<String> l=new ArrayList<String>();
        //添加元素
        l.add("a");
        l.add("a3");
        l.add("a2");
        l.add("a02");
        System.out.println(l);//[a, a3, a2, a02]
        //根据下标插入元素
        l.add(3,"b");     
        System.out.println(l);//[a, a3, a2, b, a02]
        //可以根据元素也可以根据下标删除元素
        l.remove(0); 
        System.out.println(l);//[a3, a2, b, a02]
        //根据下标返回元素
        System.out.println(l.get(1)); //a2
        //返回指定元素第一次出现的下标值,如果没找到就返回-1
        System.out.println(l.indexOf("a2")); //1
        l.set(0,"123");//用指定元素替换此列表中指定位置的元素
        System.out.println(l);//[123, a2, b, a02]
        List<String> l2=l.subList(1, 3);
        System.out.println(l2);

实现类:ArrayList,LinkedList,Vector,Stack

(1)ArrayList():有序表底层由数组来实现的,默认数组的初始长度是10,根据底层右移运算进行扩容,每次在原来的基础上扩容一半

 private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length; //elementData是底层创建的数组
        int newCapacity = oldCapacity + (oldCapacity >> 1); //右移操作是除2
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

猜你喜欢

转载自www.cnblogs.com/xuwangqi/p/11208726.html