黑马程序员--有关集合类知识归纳

集合类知识归纳

     Collection层次结构的根接口为Collection,它中的常用方法有:add,remove,clear,retainAll,
removeAll,size,isEmpty,contains等,它继承自Iterable接口,子类可以通过它获取迭代器对集合中的

元素进行遍历,iterator迭代器只能对遍历的元素进行删去操作,不可以进行添加或修改动作。但List体系

中有Iterator的子接口ListIterator,该接口的方法listIterator可以对集合中的元素进行遍历,添加元素,

修改元素等操作。
      Collection中有有两个常用子接口List和Set,List集合中元素是有序存储的,且允许有重复元素存在,
因为该体系中含有索引。而Set集合中不允许有元素重复,且元素间是无序的。
      List集合常用三子类:ArrayList,LinkedList,Vector
      ArrayList底层数据结构是数组数据结构,特点:查询速度快,增删元素慢。它中的方法多是在
操作角标index,当然它从父类继承很多方法,都可以使用。常用方法add(index,element),
remove(index),set(index,element),get(index),subList(fromindex,toindex)等等
      LinkedList底层数据结构是链表数据结构,特点:查询速度慢,增删元素快。常用方法:addFirst,
addLast,getFirst,getLast,removeFirst,removeLast等,jdk1.6后分别用下边方法取代上边的那些,
offerFirst,offerLast,peerFirst,peerLast,pollFirst,pollLast.使用前边方法时,若集合为空

返回NoSuchElementException;使用后边方法,当集合为空时返回null。
      Vector底层数据结构也是数组数据结构。与ArrayList类似,但逐渐被后者代替。原因如下:ArrayList
初始容量为 10 ,数据占满数组后以50%扩容;而Vector初始容量也为 10,但数据占满数组后以100%扩容;
前者使用较为节约内存。另,Vector中元素取出使用枚举,作用同iterator但枚举的名称和方法名都较为冗长,
难为记忆。枚举常用方式:Vector v=new Vector();
                    v.add(...);
                    v.add(...);
                    v.add(...);
                    Enumeration en=v.elements();
                    while(en.hasMoreElements())
                    {  System.out.println(en.nextElement()); }
      Set集合常用子类:treeSet和hashSet
      treeSet底层数据结构是二叉树数据结构,可以对元素自然排序。该集合保证元素唯一是通过compareTo方法,
当该方法返回值为0时,认为两元素是同一个。
      对元素进行排序的两种方式:1.实现Comparable,覆盖compareTo方法,对实现它的元素集合或数组进行
自然排序。实现此接口的列表和数组可以通过Collections.sort和Arrays.sort方法进行自然排序。实现此接口的
对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。2.实现Comparator,覆盖compare方法,此时可以
定义自己的比较方式。适用情况是:对象自身不具有比较性,或者具有的比较性不是我们所需要的时候。
      hashSet底层数据结构是哈希表,它是根据存储的元素内容算出一个hash值,按值存储,
很可能在表中存储位置的顺序与存储时的顺序不一致,即具有无序性。该集合保证元素唯一性是通过hashCode
和equals两个方法,但只有当两对象的hashCode一样时才会调用equals方法进行判断。只有当两元素的
hashCode值相同且equals返回值为true时,两元素才认为是相等的。
      集合中另一类是Map集合,该集合中存储的都是键值对,且需保证键在集合中的唯一性。常用方法:
put(key,value),putAll(Map<? extends K,? extends V>m),clear(),remove(key),isEmpty(),containsKey(key),
containsValue(value),get(key),size(),values(),keySet(),entrySet()等等
      Map集合常用接口子类:HashMap,TreeMap,Hashtable。这三个均实现了Map接口,所以都具有Map中的
那些方法。
      HashMap:底层数据结构是哈希表数据结构,存储的都是哈希地址值。允许null键,null值,它是jdk1.0后出来的,
它的实现不是线程同步的,效率高。
      TreeMap:底层数据结构是二叉树数据结构,用于给Map集合中的键进行自然排序,它的实现不是线程同步的。
      Hashtable:底层数据结构是哈希表数据结构,存储的是哈希值,不允许null键,不允许null值,
它是jdk1.2后出现的,它的实现是线程同步的,效率较低。
      Map集合中的元素两种取出方式:keySet和entrySet
      keySet方法用于取出集合中的所有键,返回的是set类型集合,可以通过迭代器方法将键取出,再通过
get(key)方法获得Map中的值。
      entrySet方法用于取出集合中的那些映射关系,返回结果为Set<Map.Entry<K,V>>,通过迭代器取出Map.Entry<K,V>对象
再通过Map.Entry<K,V>中的getKey和getValue方法取回所要的,同样可以获得Map集合中的元素。
      集合框架中有两个常用工具类:Collections和Arrays
      Collections中常用方法:Collections.sort(List<T> list),Collections.max(...),Collections.fill(...)
Collections.replaceAll(List<T> list, T oldVal, T newVal),Collections.reverse(),Collections.reverseOrder()
swap(List<?> list, int i, int j),synchronizedList(List<T> list),shuffle(List<?> list) 使用默认随机源随机产生顺序
其中sort,max,reversOrder等方法也可以添加指定比较器。
      Arrays:用于操作数组的工具类。
      常用方法:toString:将数组中元素变成字符串;asList:将数组变成集合(便于用操作集合的思想去操作数组)

返回的是 List<T> ;
注意:1.当数组中的元素都是对象时,直接变成集合中的元素。当数组中的元素是基本数据类型时,整个数组
会作为一个元素存在于集合中。2.数组变成集合后不可以进行增删操作,因为数组长度是一定的。
      Collection中的toArray方法将集合变数组,当指定类型数组长度小于集合size时,该方法内部会
再创建一个大小为size的数组;当指定的数组长度大于集合size时,方法内部不再创建数组。
事实上创建一个大小为size的数组最好。例:String[] arr=Collect.toArray(new String[al.size()]);
将集合变数组的好处是:为了限定对元素等的增删操作。

你可能感兴趣的:(程序员)