java基础复习 集合框架

发布时间:2017-3-24 6:12:18 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"java基础复习 集合框架",主要涉及到java基础复习 集合框架方面的内容,对于java基础复习 集合框架感兴趣的同学可以参考一下。

cllection集合 接口cllection<E> 概述 出现集合的原因: 集合是存储对象最常用的一种方式。数据多了用对象存,对象多了用集合存 集合的特点: 1只用于存储对象,2长度可变,3可以存储不同类型的对象。 集合和数组的不同 1长度。数组是固定长度的length(String获取长度length()方法DatagramPacket中用getLength()获取发送或接收到的数据的长度),集合是可变长度的2存储内容:数组中只能存储同一种类型的数据,要么全存Demo,要么全存Person,数组在建立的时候就已经指定了类型,而集合可以存储任何对象,应用更广泛。 常用和集合以及其结构图:                             //list元素是有序的,元素可以重复,因为该集合体系有索引 //set元素是无序的,不可以重复 java.util                                    接口 Collection<E>                                           |——>接口 List<E>                                                  |——>类 ArrayList<E>                                                  |——>类 LinkedList<E>                                                  |——>类 Vector<E>                                           |——>接口 Set<E>                                                   |——>类 HashSet<E>                                                         |——>类 LinkedHashSet<E>                                                  |——>类 TreeSet<E>        问什么出现这么多集合容器:因为每一个集合的数据结构不同。数据结构是指集合存储数据的方式。 共性方法                      增:       booleanadd(E e)                             booleanaddAll(Collection<? extends E> c)                                           删:       voidclear() 清空容器                             remove(Objecto) 移除                             booleanremoveAll(Collection<?> c)  移除一堆元素                                           判断:    booleancontains(Object o)                             booleanisEmpty()                             intsize()                                           取出:                                booleanretainAll(Collection<?> c) 取交集                             Object[]toArray()                             <T>T[] toArray(T[] a)                             inthashCode()                             迭代器        方法iterator()返回对象的迭代器接口Iterator<E>。此接口中有方法boolean hasNext():有元素时返回真,没有返回假 ;E next() ;void remove() 迭代器的基本使用如下                      1、                      Iterator<type>it = al.iterator()                      while(it.hasNext())                      {                             sop(it.next());                      }                      2、                      for(Iteratorit = al.iterator() ; it.hasNext() ;)//it是for的局部变量,使用后就释放了而while使用完后it仍存于内存中                      {                             sop(it.next());                      } List:接口 List<E> 共性方法        可以在指定位置插入元素,通过索引获取,判断元素的位置,根据位置获取元素,反向索引,listIterator        凡是可以操作角标的方法都是List集合的特有方法                             增:       voidadd(int index, E element)                                    booleanaddAll(int index, Collection<? extends E> c)                             删:       Eremove(int index)                             改:       Eset(int index, E element)                             查:       Eget(int index)                                    List<E>subList(int fromIndex, int toIndex)                                    ListIterator<E>listIterator() ListItratator:ListIterator<E>listIterator()        在迭代过程中,添加或者删除元素,ListItratator有自己的增删改查方法。使用remove将元素从集合中移除后,元素还在内存中。        并发修改异常:迭代器将元素取到迭代器中,操作结合中元素的方法就有了两种,1是集合的操作方法,2是迭代器的操作方法,当这两种同时使用时会参数并发访问异常                      Iteratorit = al.iterator();                      while(it.hasNext())                      {                             Objectobj = it.next();                             if(obj.equals("   1"))                                    al.add("   2");                             sop("obj= "+obj);                      }       List集合具体对象的特点 概述:               ArrayList:底层使用的是数组结构。特点:1查询速度很快。但是增删稍慢。2线程不同步。ArrayList默认的长度是10,当超过10个,就会new一个新的数组,长度是50%延长,把原来数组中的元素copy到新数组中来,再把新元素添加到后面去。               LinkedList:底层使用的是链表数据结构(链表数据结构是什么)特点:1增删速度很快,查询速度慢。               Vector:底层是数组数据结构。线程同步。增删和查询速度都很慢,被ArrayList替代了。vector是1.1版本出现的,集合框架是1.2版本出现的。Vector默认是10,超过100%延长。      vector:               Vector中的枚举。Vector中的elements()方法返回Enumeration<E>,枚举是Vector特有取出方式。ArrayList不支持枚举 。枚举和迭代是一样的,因为枚举的名称和方法名称都过长,多以被迭代器取代了。                                           importjava.util.*;                                           class  VectorDemo{                                                  publicstatic void main(String[] args) {                                                         Vectorv = new Vector();                                                         v.add("java01");                                                         v.add("java02");                                                         v.add("java03");                                                         v.add("java04");                                                         Enumerationen = v.elements();                                                         while(en.hasMoreElements()){                                                                System.out.println(en.nextElement());                                                         }                                                             }                                           }   LinkedList 特有方法:  void addFirst(Ee)        voidaddLast(E e)        EgetFirst()       offerFirst()1.6出现,如果没有元素返回null        EgetLast()        offerLast()1.6出现,如果没有元素返回null        EremoveFirst()    pollFirst()1.6出现,如果没有元素返回null        EremoveLast()     pollLast()1.6出现,如果没有元素返回null        remove不光取,还删除        如果集合中没有元素,无论get还是remove都会抛出没有这个元素异常。              使用LinkedList模拟一个堆栈或者队列数据结构。 堆栈:先进后出,如同一个杯子,队列:先进先出,如同一个水管。                                          importjava.util.*;                                    classQue                                    {                                           privateLinkedList link ;                                           Que()                                           {                                                  link= new LinkedList() ;                                           }                                           publicvoid myAdd(Object obj)                                           {                                                  link.addFirst(obj);                                           }                                           publicObject myGet()                                           {                                                  //returnlink.removeLast();//队列,先进先出                                                  returnlink.removeFirst();//堆栈,先进后出                                           }                                           publicboolean isNull()                                           {                                                  returnlink.isEmpty();                                           }                                    }                                    class  LinkedListDemo                                    {                                           publicstatic void main(String[] args)                                           {                                                  Queq = new Que();                                                                                                   q.myAdd("    01");                                                  q.myAdd("    02");                                                  q.myAdd("    03");                                                  q.myAdd("    04");                                                    System.out.println(q.myGet());                                           }                                    } ArrayList ArrayList去除ArrayList集合中的重复元素                                                         importjava.util.*;                             class  ArrayListDemo                             {                                    publicstatic void main(String[] args)                                    {                                           ArrayListal = new ArrayList();                                           al.add("    01");                                           al.add("    02");                                           al.add("    03");                                           al.add("    04");                                           al.add("    04");                                           al.add("    05");                                           al.add("    05");                                             System.out.println(al);                                           al= singleElement(al);//这里得到的是一个新的集合                                           System.out.println(al);                                    }                                    publicstatic ArrayList singleElement(ArrayList al)                                    {                                           //定义一个临时容器                                           ArrayListnewAl = new ArrayList();                                                                                     Iteratorit = al.iterator();                                           while(it.hasNext())                                           {                                                  Objectobj = it.next();//                                                  if(!newAl.contains(obj))                                                  {                                                         newAl.add(obj);                                                  }                                           }                                           return newAl ;                                    }                             } Set:接口 Set<E> Set集合概述        元素是无序的(存入和去除的顺序不一定一致),元素不可以重复。Set集合的功能和Collection是一致的。 Set集合子类的特点 概述        HashSet hashSet底层数据结构是hash表。线程不同步。        复写hashCode()方法:   public int hashCode()               {                      return 60 ;               }        hash表数据结构的特点:先判断hash值是否相同,如果hash值相同,还要对这个对象进行校验,看是否是同一个元素(使用equals()方法)。当地址值一样,但不是同一个对象时,会在该地址值下顺延,串起来。        set集合只有一种取出方式,就是迭代器。HashSet使用add方法,当添加成功返回真,失败返回假。          TreeSet        可以对Set集合中的元素按自然顺序进行排序。TreeSet底层数据结构式二叉树,保证元素唯一性的方法是compareTo返回值是0.        TreeSet集合排序的第一种方法:让元素自身具备比较性,元素需要覆盖Comparable接口,覆盖comparaTo方法      HashSet       HashSet存储自定义对象                                                                因为要将Person存入set集合中,需要复写Person的hashcode和equals方法。因为对象是new出来的,所以他们的hash值都是不同的。这样就不能保证set集合中元素的唯一性,所以要复写hashcode方法使相同的元素hash值也相同                                       classPerson                                     {                                           privateString name ;                                           privateint age ;                                           Person(Stringname , int age )                                           {                                                  this.name= name ;                                                  this.age= age ;                                           }                                           publicint hashCode()                                           {                                                  returnname.hashCode()+age*15;                                                  //按照自己的方式实现hashCode。                                                                                                                                                    */                                           }                                           publicboolean equals(Object obj)                                           {                                                  //先判断是不是Person                                                  if(!(objintstanceof Person))                                                         false;                                                  Personp = (Person)obj ;                                                  returnthis.name==p.name&&this.age==p.age ;                                           }                                             publicString getName()                                           {                                                  returnname ;                                           }                                           publicint getAge()                                           {                                                  returnage ;                                           }                                    }   HashSet判断和删除的依据        :对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode和equals方法。ArrayList判断元素是否存在,根据equals方法。 TreeSet        TreeSet存储自定义对象。要使元素具有比较性。        二叉树        实现Comparator方式排序        当元素自身具备比较性时,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性。        在集合初始化时,可以让比较器Compartor(比较方式)为参数出入。        接口 Comparator<T>  int compare(T o1, T o2)                                    classMyCompare implements Comparator                                    {                                               publicint compare()                                           {                                                  Students1 = (Student)01;                                                  Students2 = (Student)02;                                                  intnum = s1.getName().compareTo(s2.getName());                                                  if(num==0)                                                         newInteger(s1.getAge()).compareTo(new Integer(s2.getAge));                                           }                                           returnnum;                                    }        TreeSet练习 泛型 概述 使用 泛型类 泛型方法 静态方法泛型 泛型接口 泛型限定 泛型限定2 Map集合 Map集合 概述 Map集合介绍 Map和collection一样是处于集合顶端的接口 Map是util包中的一个接口,他的泛型是<K , V>,K代表Key(键),V代表Value(值)。 Set底层就是使用了Map集合。 Map的特点是 该集合存储键值对。一对一对往里存,而且要保证键的唯一性。用作键的对象必须实现 HashCode方法和equals方法 map集合中没有迭代器        无序   Map子类对象特点 |——>Hashtable::底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的        |——>HashMap:底层是哈希表数据结果,可以使用null键null值,该集合是不同步的。无序 |——>TreeMap:底层是二叉树数据结构。线程不同步。可以用于给Map集合中的键排序。   Map共性方法 Map的方法是子类的共性方法。Collection是单列集合,而Map是双列。       1添加  V put(K key, V value)           将指定的值与此映射中的指定键关联(可选操作)。返回对应的原来的值。如果是第一次存,则返回null  void putAll(Map<? extends K,? extends V> m)           从指定映射中将所有映射关系复制到此映射中(可选操作)。  Set<Map.Entry<K,V>> entrySet()           返回此映射中包含的映射关系的 Set 视图。                       2删除                V remove(Object key)           如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。使用remove集合中没有的元素,显示null                 clear( );删除所有元素       3判断  boolean containsKey(Object key)    如果此映射包含指定键的映射关系,则返回 true。  boolean containsValue(Object value)    如果此映射将一个或多个键映射到指定值,则返回 true。    boolean equals(Object o)        比较指定的对象与此映射是否相等。         4获取  V   get(Object key)   返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。(返回null还有一种情况是对应的键或值是null)      int size()           返回此映射中的键-值映射关系数。  Collection<V> values()           返回此映射中包含的值的 Collection 视图。    Set<K> keySet()           返回此映射中包含的键的 Set 视图。                Set<Map.Entry<K,V>> Map.Entry是一种类型 entrySet()           返回此映射中包含的映射关系的 Set 视图。   keySet和entrySet 使用keySet和entrySet取得Map集合中的所有元素。思路是通过这两个方法取得set集合,再通过Set集合的迭代器来取得Map的元素。代码保存于eclipse中。   Map-keySet Map-entrySet Map练习 1实现Comparable,复写ComparaTo方法因为元素有可能放到二叉树中。如果没有这样做的话,将这个类型往二叉树中存储时,存一个没事,存两个就要报异常。String类型的数据可以直接存进二叉树,是因为String实现了Comparable接口。 2设置属性,私有,构造函数传参 3设置get,set方法 4复写toString方法 5复写equals和hashCode方法。因为保证元素的唯一性   TreeMap练习 1 2字母出现的次数 Map扩展 Collections- Collections-Sort Collections-max Collections-binarySearch Collections-替换反转 Collections-reverseOrder Collections-SynList          Arrays        集合转成数组        增强for循环        可变参数        静态导入

上一篇:windows 版Tomcat 7.0的配置
下一篇:(iPhone/iPad开发)在UIView上绘制文本

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款