单列集合(collection)

1.集合架构

                 如图所示,集合下面分为单列集合Collection和双列集合Map,而在单列集合下面又有两个子接口List和Set,如图上所说两个子接口的特征又不一样,首先是List里面的元素是有序且可重复的,而Set恰恰和它相反是无序且不可重复的。

                在List接口下面又三个实现类,分别是底层是数组的ArrarList和Vector,还有就是底层是链表的LinkedList,在这里需要注意一下这三者是使用频率是有区别的,其中ArrayList使用的最多,原因是因为他的底层是数组所以查找起来很快,在开发中查询使用的比较多,当然ArrayList也有缺点,就是增删比较慢。其次就是LinkedList,它的底层是链表所以查找起来比较慢,但增删比较快,只需找到前置结点和后继结点,最后就是Vector,虽然它的底层也是数组但它是线程安全的,所以效率比较低。

二.怎样学习集合

         学习一个接口或者一个类无非就是学习它下面的方法,而List和Set通过继承Collection,也全部重写了它当中的抽象方法,所以我们只学习List和Set下面的方法就行了。

                List下面的方法:

Collection下面的方法List肯定有的,因为是继承关系。上午讲了Collection下面的方法,在List中也可以用。接下来咱们讲List独有的方法。
List独有的方法:
    增:
        void add(int index, E e);在指定的位置上插入一个元素
        boolean addAll(int index, Collection<? extends E> e);将一个集合插入到另外一个集合的指定的位置
    删:
        Collection删除的时候,通过元素来删除的。 remove(Object obj)
        E remove(int index);通过索引来删除指定的元素。返回的是被删除的元素
    改:
        E set(int index, E e); 通过指定的索引修改数据元素,返回值是被修改的原数据
    查:
        E get(int index);  通过索引下标去获取指定元素
        int indexOf(Object obj);通过元素获取指定的下标的
        int lastIndexOf(object obj);通过元素获取最后一次出现的元素的下标
        List<E> subList(int formIndex, int toIndex);截取一部分出来

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

public class Demo1 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("张三");
        //有序的  可重复的
        System.out.println(list);//[张三, 李四, 王五, 张三]
        list.add(2, "狗蛋");
        System.out.println(list);
        List<String> list1 = new ArrayList<>();
        list1.add("麻子");
        list1.add("赵四");
        list1.add("贝贝");
        list.addAll(1, list1);
        System.out.println(list);

        System.out.println(list.remove(0));//在删除
        System.out.println(list);//目的是删除以后的集合的数据展示一下
        //[麻子, 赵四, 贝贝, 李四, 狗蛋, 王五, 张三]

        System.out.println(list.set(2, "彩云"));//贝贝
        System.out.println(list);//修改之后的集合
        System.out.println(list.get(0));
        System.out.println(list.get(1));
        System.out.println(list.get(2));
        System.out.println(list.get(3));
        //System.out.println(list.get(89));
        System.out.println(list.indexOf("麻子"));//0
        list.add(2, "张三");
        System.out.println(list.lastIndexOf("张三"));//7

        System.out.println(list);
        List<String> strings = list.subList(3, 5);
        System.out.println(strings);

    }
}

 Set集合:

        Set接口有两个实现类:

                HashSet:

                依靠hash值进行存储的,如果两个元素hash值一样的话,就不再存储了

                TreeSet:

                底层是二叉树,对存储数据进行自然排序

它下面的方法和ArrayList下面的方法很像。 

三.ArrayList和LinkedList和Vector的区别

ArrayList和Vector 底层是数组,但是Vector是线程安全的,所以效率底,开发中不用Vector
接下来介绍ArrayList和linkedList区别:
    1.ArrayList底层是数组
     LinkedList底层是双向链表
    2.ArrayList 的特征:
        查询快: 底层是索引,有序的通过内存有序地址,直接找到 时间复杂度  o(1)
        增删慢: 增加数据和删除数据有可能扩容。每次扩1.5倍。扩容的话,浪费内存浪费时间o(n)
    3.LinkedList的特征:
        查询慢:底层是二分法查找的算法 时间复杂度是log以2为底 n的对数
        增删快:直接找前置结点 Node prev,后继结点 Node next
        。时间复杂度是 o(1)
    所以开发时候的用ArrayList
    后续还要学习ArrayList的源码

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值