JAVA基础知识点17-容器、List接口、ArrayList、Vector 向量 与 ArrayList 区别、LinkedList

数组的特点:
    定长
    类型一致
    存储多个数据
    索引,根据索引操作数组效率高
    引用数据类型

 容器体系: 系列的容器类
    可变长,操作灵活
    任意类型的数据
    只能存储引用数据类型
public class CollectionDemo02 {
    public static void main(String[] args) {
        //容器对象
        //多态 col能够调用的方法为Collection接口中存在的内容
        Collection col = new ArrayList();
        Collection col2 = new ArrayList();

        //boolean add(E e)  添加
        col.add("zhangsan");
        col.add(123);
        col.add(false);

        col2.add('a');
        col2.add('b');
        col2.add('c');

        System.out.println(col);
        //boolean addAll(Collection<? extends E> c)
        System.out.println(col.addAll(col2));;
        System.out.println(col);
        System.out.println(col2);

        //void clear() 从此集合中删除所有元素(可选操作)。
        //col2.clear();
        System.out.println(col2);

        //boolean isEmpty() 如果此集合不包含任何元素,则返回 true 。
        System.out.println(col2.isEmpty());

        //boolean contains(Object o) 如果此collection包含指定的元素,则返回 true 。
        System.out.println(col.contains("zhangsan"));

        col2.add('d');

        //boolean containsAll(Collection<?> c) 如果此集合包含指定集合中的所有元素,则返回 true 。
        System.out.println(col.containsAll(col2));

        /*
        boolean remove(Object o) 从此集合中移除指定元素的单个实例(如果存在)(可选操作)。
        boolean removeAll(Collection<?> c) 删除此集合的所有元素,这些元素也包含在指定的集合中(可选操作)。  删除交集
         */
        //System.out.println("删除单个数据:"+col.remove("zhangsan"));

        //System.out.println(col);
        //System.out.println("删除多个数据:"+col.removeAll(col2));
        System.out.println(col);
        System.out.println(col2);

        //boolean retainAll(Collection<?> c) 仅保留此集合中包含在指定集合中的元素(可选操作)。
        System.out.println(col.retainAll(col2));
        System.out.println(col);
        System.out.println(col2);

        System.out.println(col.size());

        //Object[] toArray() 返回包含此集合中所有元素的数组。
        System.out.println(Arrays.toString(col2.toArray()));
        System.out.println(col2.toArray()[0]);

        System.out.println("--------------foreach-------------------");
        for(Object obj:col2){
            System.out.println(obj);
        }

        System.out.println("--------------iterator-------------------");
        //Iterator<E> iterator() 返回此集合中元素的迭代器。
        //1.获取操作某一个集合迭代器
        Iterator it = col2.iterator();
        //2.hashNext() 是否存在下一个元素
        while(it.hasNext()){
            //3.获取下一个元素next()
            System.out.println(it.next());
        }


    }
}
List 接口 : 有序可重复
    新增功能: 一些根据索引操作的方法  of(..)创建集合的同时添加数据,集合不可变  subList()
    遍历方式
        foreach
        iterator迭代器
        for
        列表迭代器 ListIterator
public class ListDemo03 {
    public static void main(String[] args) {
        //创建集合,可以添加任意数据
        //泛型: 规范存储数据的数据类型 <引用数据类型>
        //泛型可以提高代码的可读性,稳定性,帮助检查存储数据的类型
        //引用类型的泛型不能省略
        List<Integer> list = new ArrayList<>();

        list.add(1);
        list.add(0);
        list.add(3);
        list.add(2);
        list.add(5);
        list.add(0);

        list.add(4,10);

        System.out.println(list);

        //当集合中存储的数据也为整数时候,默认以索引为主,没有抛出异常
        list.remove(2);
        //list.remove(10);
        System.out.println(list);

        //int indexOf(Object o)
        System.out.println(list.indexOf(0));

        //static <E> List<E> of(...)   返回包含指定元素的不可修改的列表(数据值,数据个数..)
        System.out.println(List.of());
        List<String> ls = List.of("a","b","c");
        //ls.add("d");  //不可修改
        //ls.remove("a");  //不可修改
        //E set(int index, E element) 用指定的元素替换此列表中指定位置的元素(可选操作)。
        //ls.set(1,"bbb");
        System.out.println(ls.indexOf("a"));
        System.out.println(ls);

        //List<E> subList(int fromIndex, int toIndex) 返回指定的 fromIndex (包含)和 toIndex (不包括)之间的此列表部分的视图。
        List<Integer> list2 = list.subList(1,5);
        System.out.println(list2);

        System.out.println("------------foreach----------------");
        for(String s:ls){
            System.out.println(s);
        }

        System.out.println("------------for----------------");
        //i作为集合的索引
        for(int i=0;i<= ls.size()-1;i++){
            System.out.println(ls.get(i));
        }

        System.out.println("------------iterator----------------");
        //1.获取操作这个集合的迭代器
        Iterator<String> it = ls.iterator();
        //2.判断是否存在下一个元素
        while(it.hasNext()){
            String str = it.next();  //因为存在泛型,素有可以使用String类型接收
            System.out.println(str);
        }
    }
}

 

List接口的实现类
     有序  可重复  都可以根据索引进行操作

 ArrayList
     底层数据结构: 数组|可变数组 (数组:内存中一段连续的内存空间)  (Object[] elementData)
     优点 : 查询,遍历效率高(根据索引)
     缺点 : 添加,删除数据效率较低,创建新数组,数据拷贝
     应用场景 : 大量做查询的时候,少量做修改的时候,适合使用ArrayList存储数据
     使用:
         构造器:
             ArrayList() 构造一个初始容量为10的空列表。  ***  ->不确定集合中存储多少数据,使用
             ArrayList(int initialCapacity) 构造具有指定初始容量的空列表。 ->当确定集合中存储数据的个数范围的时候,可以选择使用
             ArrayList(Collection<? extends E> c) 按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。

         方法:操作内容,根据索引进行操作
     遍历:
     扩容:
         根据空构造构建ArrayList,初始默认空数组,第一次添加数据默认容量为10,存不下了才扩容,每次扩容原容量的1.5倍(int newCapacity = oldCapacity + (oldCapacity >> 1);)
         通过Arrays.copyOf方法扩容
     注意: ArrayList中可以添加null值

Vector 向量 与 ArrayList 区别
     共同点: 底层结构也是数组,特点一样
     不同定:
         1)Vector线程安全,ArrayList线程不安全
         2)扩容:Vector每次扩容原容量的2倍  而ArrayList是1.5倍,所以ArrayList更有利于节省内存
List 接口的实现类
LinkedList 有序可重复
    底层: 双向链表结构
    优点:
        增删效率高
    缺点:
        查询效率低
    应用场景:
        大量做增删,少量做查询,适合使用LinkedList
    构造器:
        LinkedList() 构造一个空列表。
        LinkedList(Collection<? extends E> c) 按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。

    方法: 新增了一些操作链表头尾的方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值