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>();

 

posted @ 2015-08-23 15:15  慕言与君拂  阅读(114)  评论(0编辑  收藏  举报