Collection集合框架和List集合笔记

Collection集合框架和List集合

1.什么是集合?
能够存储多个同类型的基本数据类型的容器我们叫数组,那么可以存储多个同类型对象的容器我们就称之为集合!

什么是Collection集合框架,通过下面这个图来说明! 

这里写图片描述
Collection是一个根接口,而它旗下又很多个子接口继承了它,其中两个最重要的子接口分别的是List和Set,它们继承了Collection接口之后,自己又有自己的新特性,List接口下有3个子类实现了它,Set接口下有2个子类实现了它。它们之间的这种层级关系就形成了一个框架,我们就叫它Collection集合框架!

    为什么会出现这么多种集合呢?
    因为每一个容器对数据的存储方式都不同。这个存储方式我们称之为数据结构!

2.List集合和Set集合

List和Set都是继承了Collection接口
不同的话就是实现了List集合的类它存储的元素都是有序的,而且有索 引,可以出现重复的元素,而Set集合的元素是无序的,没有索引,不能出现重复元素。

2-1.List集合的子类:
List有3个比较重要的子类,分别是ArrayList,LinkedList,Vector。
ArrayList和Vector差不多,它们最大的区别就在ArrayList是不同步的,Vector是同步的,ArrayList的效率比较高,所以我们一般都ArrayList。

ArrayList的特点:它的底层是数组的结构,所以它和数组一样,每一个元素都有索引,而且它是有序的,集合在可以存在重复的元素。因为底层是数组结构的,所以它的查询元素速度快,但是增删元素的速度就相对较慢。

//通过一段代码来看看ArrayList的创建和一些基本操作
class demo01 
{
    public static void main(String[] args) 
    {
        ArrayList arr = new ArrayList();//创建对象
        ArrayList arr1 = new ArrayList();
        arr.add("java1");//添加元素
        arr.add("java2");
        arr.add("java3");
        arr.add("java4");

        arr1.add("java1");//添加元素
        arr1.add("java2");
        arr1.add("java6");
        arr1.add("java5");
        Iterator it = arr.iterator();//获取一个迭代器 用于取元素
        while(it.hasNext()) //判断容器是否为空 返回boolean
        {
            sop(it.next());//返回下一个元素
        }
        /*
        //另一种写法 能减少内存的使用
        for (Iterator it = arr.iterator(); it.hasNext(); )
        {
            sop(it.next());
        }*/
            sop(arr);//原来的元素
        cc.p(arr.containsAll(arr1));//是否包含arr这个集合   

        cc.p(arr.size());//集合的长度

        arr.removeAll(arr1);//去除了和arr1相同的部分
             sop(arr);

        arr.retainAll(arr1);//只保留和arr1相同的部分
            sop(arr);

    }
    //一个打印的小方法
    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
}

LinkedList的特点:它的底层是链表的结构,所以它和链表一样,每一个元素都有索引,而且它是有序的,集合在可以存在重复的元素。因为底层是链表结构的,所以它的查询元素速度较慢,但是增删元素的速度非常快。

//通过一段代码来看看LinkedList创建和的方法
class myList//操作和创建LinkedList集合的类
{
    private LinkedList  link;
    myList()
    {
        link = new LinkedList();//构造函数创建LinkedList类
    }
    public void myAdd(Object obj)  ;//写入元素
    {
        link.addLast(obj);
    }
    public boolean myEmpty()    ;//判断容器里是否为空
    {
        return link.isEmpty();
    }
    public Object myRemove()   ;//取出容器里的元素 从最后一个开始取
    {
        return link.pollLast();
    }
}
class demo03 
{
    public static void main(String[] args) 
    {
         myList link = new myList();//创建一个LinkedList对象
         link.myAdd("java1");//往里面添加元素
         link.myAdd("java2");
         link.myAdd("java3");
         link.myAdd("java4");
    while(!link.myEmpty())//删除所有元素
        {
             System.out.println(link.myRemove());
        }
    }
}
总结:
ArrayList和LinkedList都可以存储有序的带有索引的元素,如果是查找动作比较多的话,可以使用ArrayList!如果是经常要对集合里的元素进行操作的话那用LinkedList会比较好!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值