博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java集合框架总结
阅读量:6867 次
发布时间:2019-06-26

本文共 3221 字,大约阅读时间需要 10 分钟。

hot3.png

1、为什么出现集合类?

     面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常有的一个方式。

 

2、数组和集合类同是容器,区别?

  1.数组虽然可以存储对象,但是长度是固定的,集合长度是可变的。

  2.数组中可以存储基本数据类型,集合只能存储对象。

3、集合类的特点

    集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象

 

4、集合框架的构成以及分类

193351_CqxA_1402640.png

5为什么会出现这么多容器?

因为每一个容器对数据的存储方式都有不同,这个存储方式称之为:数据结构 

6、集合中存储的都是对象的引用(地址)

7、什么是迭代器? 

    其实就是集合的取出元素的方式

8、为什么集合取出方式定义在内部?

把取出方式定义在集合内部,这样取出方式就可以直接访问集合内容的元素,那么取出方式就被定义成了内部类,而每一个容器的数据结构不同,所以取出的细节也不一样,但是都有共性内容,判断和取出,那么就可以将共性抽取.

9、对集合使用迭代器的两种循环

    Iterator it = list.iterator();

    While(it.hasNext()){

    //..

    }

    //while循环完后迭代器对象还存在于内存,还占用内存空间

    //for循环之后it作为局部变量就不存在于内存,不占用内存空间

    For(Iterator it = list.iterator();it.hasNext();){

    //.

    }

Collection:

      |------List: 元素是有序的,元素可以重复,因为该集合、体系有索引

          |--------ArrayList :  底层使用数组结构 

                   特点:  查询速度快,增删速度慢,线程不同步

          |--------LinkedList : 底层使用链表结构

                   特点:  增删速度很快,查询速度稍慢。

          |--------Vector:  底层是数组数据结构,线程同步,被ArrayList替代了

    枚举就是Vector特有的取出方式,因为枚举的名称以及方法都过长,所以被迭代器取代了

     |------Set : 元素是无序(存入和取出的顺序不一定一致的),元素不可以重复。

          |--------HashSet: 底层数据结构是哈希表,线程是非同步的

                   1. HashSet是通过元素的两个方法: hashCode()equals(),如果元

                   素的hashCode值相同,才会判断equals()

                   2.对于判断元素是否存在,以及删除操作,依赖的是hashCode()equals()方法

          |--------TressSet: 可以对Set集合中的元素进行排序

                                保证元素唯一性: compareTo方法return 0

                                TreeSet排序的第一种方式 :  让元素自身具有比较性,元素需要 实现Comparable接口覆盖compareTo方法,这种方式也称为元 素的自然排序,或者叫做默认排序

                                TreeSet排序的第二种方式: 当元素自身不具备比较性时,或者具备的比较性不是所需要的, 这时就需要让集合自身具备比较性,在集合初始化时,就有了比 较方式

TreeSet里面存储的元素必须具有比较性,排序时主要条件相同时一定要比较次要条件

      |---------Map<K,V>: 该集合存储键值对,一对一往里存,而且要保证键的唯一性

                            1,添加

                                Put(K,V);

                            2,删除

                                Clear();

                            3,判断

                                containsValue(Object value);

                                containsKey(Object key);

                                isEmpty();

                             4,获取

                                Get(Object key);

                                Size();

                                Values();

                                entrySet();

                                keyset();

            |-------Hashtable: 底层是哈希表数据结果,不可以存入nullnull值,线程同步        jdk 1.0

            |-------HashMap:底层是哈希表数据结果,可以存入nullnull值,线程不同步

                   Jdk1.2开始,效率高

            |-------TreeMap: 底层是二叉树结构,线程不同步,可以用于给map集合中的键进行排序;

              和Set很像,其实Set底层就是使用了Map集合

        Map集合的两种取出方式 

                            1, Set keySet<k> map中所有的键存入到Set集合,因为set具备迭代器,所以可以迭代方式取出所有的键,根据get方法,获取每一键对应的值,Map集合的取出原理map集合转成set集合,在通过迭代器取出 

                2Set<Map.Entry<k,v>> entrySet()  map集合中的映射关系取出来

 

           |-----ArrayList:

                特有方法。凡是可以操作角标的方法都是该体系特有的方法。

                            

                                Add(index,element);

                                addAll(index,Collection);

                            

                                Remove(index);

                            

                                Set(index,elemet);

                            

                                Get(index)

                                subList(from,to); //包含头不包含尾

                         listIterator();

                             

          |------LinkedList: 特有方法

                       

                    addFirst();

                    addLast();

                     

                    //获取元素,但不删除元素,抛出异常NoSuchElementException - 如果此列表为空

                    getFirst();

                    getLast();

                     

                    //获取元素,但是元素被删除,抛出异常NoSuchElementException - 如果此列表为空

                    removeFirst();

                    removeLast();

                     

                    JDK1.6出现了替代方法.

                     

                    //在此列表的开头插入指定的元素。

                    offerFirst();

                    offerLast();

                     

                    //获取元素,但不删除元素, 此列表的第一个元素;如果此列表为空,则返回 null

                    peekFirst();

                    peekLast();

                     

                     

                    //获取元素,但是元素被删除, 如果此列表为空,则返回 null

                    pollFirst();

                    pollLast();

                     

Iterator接口

                                     

Ø  所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象。

Ø  Iterator对象称为迭代器,用以方便的实现对容器内元素的遍历操作。

Ø  Iterator接口定义了如下方法:

                                     

     Boolean   hashNext();  //判断是否有元素没有被遍历

     Object     next();      //返回游标当前位置的元素并将游标移动到下一位置

     Void        remove();     //删除游标左面的元素,在执行了next操作之后该操作只能执行一次

                                     

      List集合特有的迭代器,ListIteratorIterator的子接口

                 

      在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生ConcurrentModificationException,,所以,在迭代器时,Iterator方法优先,只能对元素进行判断,取出,删除操作,对List集合迭代时若想其它操作,就只能选用子接口.

                 

 

泛型

       概念: 泛型就是参数化类型,使用广泛的类型

       起因:数据类型不明确

              ---  装入数据的类型都被当作Object对待,从而丢失自己的实际类型。

              ---  获取数据时往往需要转型,效率低,容易产生错误。

              作用: 安全 在编译的时候检查类型安全。

                        省心:   所有的强制转换都是自动和隐式的,提高代码的重用率。

 

              泛型方法 <> 返回类型签名  --- 只能访问对象的信息,不能修改信息

    泛型的限定:

? extends E: 可以接收E类型或者E的子类型,上限

? super  E: 可以接收E类型或者E的父类型,下限

转载于:https://my.oschina.net/u/1402640/blog/193636

你可能感兴趣的文章
商汤、旷视们“闯入”安防圈,传统安防巨头们怎么评价这些AI新贵?
查看>>
Spark-zeppelin大数据可视化导入Mysql
查看>>
Instana:将微服务监控带入到服务级别
查看>>
没有对比就没有伤害,优秀的代码VS糟糕的代码
查看>>
开源日志系统log4cplus(三)
查看>>
.NET Core下的日志(2):日志模型详解
查看>>
赋予机器手一层可感受温度的皮肤
查看>>
通过Docker来部署Mesos集群
查看>>
处理硬件故障的5款免费应用
查看>>
Sitecore Sitecore 8将营销工作化繁为简
查看>>
泰一指尚携手吉利汽车、丝蕴syoss荣获中国广告主金远奖
查看>>
业务需求不息 数据生命不止
查看>>
MWC新看点:5G网络从标准化向商业化迈进
查看>>
java命名规范
查看>>
《中国人工智能学会通讯》——2.20 专用的深度学习处理器
查看>>
管理员权限的凭证安全漏洞
查看>>
Forrester:云计算受大型企业欢迎
查看>>
“以病患为中心”的智能医疗服务开启数字化医疗新体验
查看>>
西门子楼宇自动系统出现中间人攻击漏洞CVE-2016-9154 本已发布通告可又悄悄撤除...
查看>>
存储技术专家预测2017年云存储采用率飙升
查看>>