zoukankan      html  css  js  c++  java
  • java中的集合

    Collection接口

      Collection集合只能存储单个元素,也就是说:里面不能存储数组,集合,并且里面只能保存引用数据类型,不能包含基本数据类型,里面保存类型都是java.lang.Object;所以:集合保存元素不是不区分类型,是因为多态,所有的类型都会自动向上转型为Object类型;所以说集合实际上也是要求数据类型的.同时这些不同的对象都丢失了自己自定义的属性.

      集合中包括ListSet,另外还有Map不属于集合但与集合的操作形式相似(几乎相同).

    因为Collection是接口,所以只能多态调用这些方法

      方法---数据操作

        增  boolean add();//往集合中添加元素

        删  void clear()://清空集合,删除所有的元素

           boolean remove()//删除某个特定元素

        查    boolean isEmpty();

           boolean contains(Object o);//集合中是否可以包含某个元素

           int size()://返回集合所有包含元素的个数

        遍历:

           Iterator iterator

           Iterator:迭代器

               Iterator类有有三个方法

                 1 boolean hasnext():判断游标的下一位是不是还有元素,如果有,就返回true,如果没有就返回false;        

              2 next(): 将迭代器向下移动一位,并且取出将要指向的元

              3 remove():删除当前指向的元素

              原则上上面三个都必须按照这个顺序调用

    remove()contains()都需要重写equals().因为他们都需要调用equals()方法来定位元素,但是Object中的equals比较的是内存地址,所以我们需要重写,用对象本身的内部属性来进行对象的比较.两个对象的内存地址肯定不同,但是如果都是实例化于同一个类,那么他们的属性是肯定相同,那么我们比较的是属性的值.

    在循环删除集合多个元素的时候,只能使用迭代器的remove()方法,因为集合自身的remove()方法删除以后,集合就变了,如果集合当中内容改变以后,就必须重新获取迭代器;我们迭代器在迭代的时候,有个遍历列表根据这个里面的元素然后contains方法/equals()再进行需要的操作.迭代器的删除可以用迭代器直接循环删除,集合自身删除或者循环删除不能和迭代器产生相关,当进行删除后不能再调用迭代器,否则会报错ConcurrentModificationException.

    集合的遍历输出有以下几种方式:

      while-迭代器遍历

      for-迭代器遍历

      foreach-迭代遍历

      for-get遍历(只有List才可以,set,map都不可以)

    List(元素有序,可重复)包括ArrayListLinkedList两种形式(Vector已不常用).

    Set(元素无序,不可重复)包括HashSet,SortedSetTreeSet三种.

    Map(元素无序,可重复)包括HashMap,SortedMapTreeMap.

    类型检查:编译过程中,检查数据类型是否匹配

    什么是泛型:

      集合实际上和数组是一样的,一个集合只能装同一数据类型的数据.之所说集合可以放下任意的数据类型,是因为所有的数据类型都进行了向上转型,变成了Object类型.转型以后,子类对象的属性就丢失了.就访问不到了.如果我们需要使用某一个对象特有方法的时候,就需要向下转型.

      但是这样频繁类型转化不是太好.所以后来就提出了泛型的概念.

      泛型就像我们的中药柜子一样,给每个集合显式指定它要保存的类型,就相当于贴个标签指定保存什么.在加入数据之前,先对数据类型进行检查,然后再放进去,这就是泛型.

      优点:统一了数据类型,减少强制类型转换.

      缺点:只能存储单一类型的数据

      Collection<String>  strs = new  ArrayList<String>();

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

      Map<String, Integer>  maps = new  HashMap<String,Integer>();

  • 相关阅读:
    临时表学习
    再读《黄金时代》
    shell脚本获取给定年月前一月份及后一月份
    MEMORY_TARGET not supported on this system
    2013年的总结
    windows live writer试试
    入园第一篇
    工作中经常用到的几个字符串和数组操作方法
    小程序获取用户信息失败
    前端性能优化方法概括
  • 原文地址:https://www.cnblogs.com/lianggx66/p/4752500.html
Copyright © 2011-2022 走看看