关于Java的一些小总结-集合框架

集合框架:

1:集合框架。集合是用来存储数据的,比数组操作起来

    更方便,不需要考虑容量问题。可以存不同类型的数据,

    但是不建议,因此有了泛型机制来约束。编译器就可以检查

    元素类型是否匹配,避免了程序在运行时出现错误。

2:父接口Collection常用的子接口

    List:有序,可重复(元素之间调用equals比较)

    Set:无序,不可重复(元素之间调用eqauls比较)

3:List子接口的实现类

    ArrayList:

      内部是一个动态数组,查找速度快,增删慢

    LinkedList:

       内部是一个链表,查找速度慢,增删快

4:父接口Collection常用方法:

 add(Object e):增加元素

 remove(Object obj)

 addAll(Collection c):两个集合合并

 removeAll(Collection c):移除交集

 retainAll(Collection c):保留交集

 clear():清空集合

 isEmpty():判断是否是空

 size():返回集合元素的个数。

 toArray():将集合对象转换成数组

  subList(intfromIndex,int toIndex):获取集合的子集合。

2:List子接口----线性表

  常用的实现类:

 ArrayList:

      是线性结构内部封装的是动态的数组。长度的增加和减少已经被封装。

      可以理解为自动的。

              查找快,增删慢

              线程不安全,效率高

 LinkedList:

     是链表结构。一个元素里存了前一个元素的地址和后一个元素的地址。

     增加删除快,查找慢           

 Vector: 线程安全,效率低。

     

List接口提供的方法:

     add(intindex,Object obj):插入元素

    get(int index):获取元素

    remove(int index)

    indexOf(Object obj):返回元素的下标,返回-1说明没有此元素

    lastIndexOf(Object obj):

    contains(Object obj):判断是否包含元素obj

3:Set接口:

     无序,不可重复(元素类型的equals方法比较)

     无序:与放入顺序不一致。

     比喻:List好比一个有格子顺序的盒子

      Set好比一个袋子。

     实现类:

    HashSet:底层是基于散列算法(哈希算法)来存储的数据结构

    treeSet:底层是基于有序的二叉树的数据结构

 

4:增强for循环,作用是用来遍历集合或者是数组。

    是迭代的另外一种写法,不是新语言。

     编译器会将此循环编译成迭代写法。

   结构:

  for(元素类型  变量名:集合或数组的变量){

     

   }

5:泛型机制。

   1):泛型机制的本质是参数化类型。在类,接口和方法的

              定义过程中,可以进行指定参数类型名。

       

        在集合框架中,所有的集合类型都使用泛型机制。

        好处是在进行参数化类型后,就可以限制集合元素

        的类型,编译器会通过指定的泛型进行检查。

        减少代码在运行时的错误。

        public class ArrayList<E>{

                 ………………

           public boolean add(E e);

           public E get(int index);

                 ………………

        }

        ArrayList使用泛型机制,E就是类型参数。

       在具体使用时,得给E赋值,赋的值是类型名。

        List<String>  list = new ArrayList<String>();

        泛型机制不能使用八大基本数据类型

 6:集合的存储:

     集合元素都是引用类型。集合对象内存的是元素的地址信息,

     不是元素本身。

 7:集合工具类:Collections(注意与Collection的区别)

     里面提供了常用的方法,其中就有sort(),用来给集合排序。

      既然能使用sort对集合进行排序,说明元素之间是可以比较大小的。

能使用sort进行排序的元素类型必须实现comparable接口,

      必须重写接口里的compareTo(Objectobj)方法,

      这个方法就是用来进行元素之间的比较的 。

      this>obj,返回>0的数。

      this<obj,返回<0的数

      this=obj,返回0

  

     Comparable---compareTo(Object a)

     Comparator---compare(Object a,Object b)

 8.Comparable与Comparator的作用与区别

     都是用来排序的:

     Comparable是元素类型必须实现的接口。必须重写

     compareTo(Object obj)方法。调用sort(p1)方法

     return this-obj  ---升序

     return obj-this ----降序

     Comparator是再原有排序规则上,临时改变排序规则时,

      使用的比较器接口。必须实现compare(Objecto1,Object o2),

      临时改变规则时,调用集合的sort(p1,p2)方法

       return p1-p2 ----升序

       return p2-p1 ----降序

 9.Map接口:存储数据是以key-value形式存储的。key相当于value的索引。

作为key的对象类型必须重写hashCode方法。

     因为key也是唯一的,不能重复的。Map的key底层就是hashSet集合。

     Map接口提供的常用方法:

         put(K k,V v):作用是向Map对象中添加元素

         get(K k):作用是通过k获取对应的value值。

          当Map中没有相应的k,那么返回的value就是null

          特点:key值可以为null.

10.重写HashCode()和equals方法后的成立关系。

     hash值相同,equals不一定为true

     hash值不同,equals一定false.

     equals为true,hash值一定相同

     equals为false,hash值有可能一样

11. 队列Queue:

     是一个接口,数据结构是只能一端进,一端出(FIFO).

  LinkedList就实现了此接口(为什么不用ArrayList实现此接口呢?)

     因为队列这种数据结构经常发生增删操作,LinkedList在增删效率上特别。

   常用方法:

  offer(E e):表示进入队列

  poll():表示从队首出队列,返回的就是出来的元素

  peek():查看队首元素,返回的就是队首元素

链表向上造型成Queue(队列接口),特点先进先出(FIFO)

      向上造型成Deque(双端队列接口),特点两端都可以进与出

      进:offerFirst(E e)

          offerLast(E e)

      出:pollFirst()

          pollLast()

   双端队列禁止一端的进出,就变成了栈的数据结构只用另一端来进行增删元素。

   特点:先进后出(FILO)

     进:push(E e)

     出:pop()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值