Java 容器 彻底掌握

来源:互联网 发布:gps数据统计相关的书 编辑:程序博客网 时间:2024/06/05 18:08
集合接口  1.Java类库中的集合接口和迭代器接口1.迭代器Iterator接口包含3个方法:public interface Iterator<E>{    E next();    boolean hasNext();    void remove();}调用next方法,访问集合中的每个元素,如果达到集合末尾将抛出NoSuchElementException.因此,调用next前需调用hasNext方法进行判断,如果下一个索引还有元素将返回true.如果想要查看集合中的所有元素,就请求一个迭代器,并在hasNext返回true时反复地调用next方法.例如:Collection<String> c=...;Iterator<String> iter=c.iterator();while(iter.hasNext()){    String element=iter.next();    do something with element}也可以利用”for each”循环for(String element : c){    do something whth element}“for each”循环可以与任何实现了Iterator接口的对象一起工作,这个接口只包含一个方法:public interface Iterable<E>{    Iterator<E> iterator();}Collection接口扩展了Iterable接口.应该将Java迭代器认为是位于两个元素之间.当调用next时,迭代器就越过下一个元素,并返回刚刚越过的那个元素的引用.2.删除元素Iterator接口的remove方法将会删除上次调用next方法时返回的元素.在大多数情况下,在决定删除某个元素之前应该先看一下这个元素是很有实际意义的.例如:Iterator<String> it =c.iterator();it.next();//skip over the first elementit.remove();//now remove it删除两个相邻的元素:例:(Error!)it.remove();it.remove();//Error!(correct!)it.remove();it.next();it.remove();//OK3.泛型实用方法由于Collection与Iterator都是泛型接口,可以编写操作任何集合类型的实用方法.例如:下面是一个检测任意集合是否包含指定元素的泛型方法:public static <E> boolean contains(Collection<E> c,Object obj){    for(E element :c)        if(element.equals(obj))            return true;    return false;}Java类库提供了一个AbstractCollection,它将基础方法size和Iterator抽象化了,但是在此提供了例行方法.例如:public abstract class AbstractCollecion<E>implements Collection<E>{    ...    public abstract Iterator<E> iterator();    public boolean contains(Object obj)    {        for(E element :this) //calls iterator()        if(element.equals(obj))            return = true;        return false;    }    ...}一个具体的集合类可以扩展AbstractCollection类了.现在要由具体的集合类提供Iterator方法,而contains方法已由AbstractCollection超类提供了.集合类的用户可以使用泛型接口中一组更加丰富的方法,而实际的数据结构实现者并没有需要实现所有例行方法的负担.Collection接口声明的方法:java.util.Collection<E>Iterator<E> Iterator()返回一个用于访问集合中每个元素的迭代器.int size()返回当前存储在集合中的元素个数.boolean isEmpty()如果集合中没有元素,返回true.boolean contains(Object obj)如果集合中包含了一个与obj相等的对象,返回true.boolean containsAll(Collection<?> other)如果这个集合包含other集合中的所有元素,返回true.boolean add(Object element)将一个元素添加到集合中.如果由于这个调用改变了集合,返回true.boolean addAll(Collection<? extends E> other)将other集合中的所有元素添加到这个集合.如果由于这个调用改变了集合,返回true.boolean remove(Object obj)从这个集合中删除等于obj的对象.如果有匹配的对象被删除,返回true.boolean removeAll(Collection<?>other)从这个集合中删除other集合中存在的所有元素.如果由于这个调用改变了集合,返回true.void clear()从这个集合中删除所有的元素.boolean retainAll(Collection<?> other)从这个集合中删除所有与other集合中的元素不同的元素.如果由于这个调用改变了集合,返回true.Object[] toArray()返回这个集合的对象数组.<T> T[] toArray(T[] arrayToFill)返回这个集合的对象数组.如果arrayToFill足够大,就将集合中的元素填入这个数组中.剩余空间填补null;否则,分配一个新数组,其成员类型与arrayToFill的成员类型相同,其长度等于集合的大小,并添入集合元素.java.util.Iterator<E>boolean hasNext()如果存在可访问的元素,返回true.E next()返回将要访问的下一个对象.如果已经到达了集合的尾部,将抛出一个NoSuchElement Exception.void remove()删除上次访问的对象.这个方法必须紧跟在访问一个元素之后执行.如果上次访问之后,集合已经发生了变化,这个方法将抛出一个IllegalStateException.2.具体的集合迭代器 iteratorList:List是Collection的子接口1)List集合中的元素可重复2)List集合中的元素有循序性3)List集合中的元素可通过索引操作 booleanadd(E o)           向列表的尾部追加指定的元素(可选操作)。 voidadd(int index, E element)           在列表的指定位置插入指定元素(可选操作)。 booleanaddAll(Collection<? extends E> c)           追加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序(可选操作)。 booleanaddAll(int index, Collection<? extends E> c)           将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。 voidclear()           从列表中移除所有元素(可选操作)。 booleancontains(Object o)           如果列表包含指定的元素,则返回 true。 booleancontainsAll(Collection<?> c)           如果列表包含指定 collection 的所有元素,则返回 true。 booleanequals(Object o)           比较指定的对象与列表是否相等。 Eget(int index)           返回列表中指定位置的元素。 inthashCode()           返回列表的哈希码值。 intindexOf(Object o)           返回列表中首次出现指定元素的索引,如果列表不包含此元素,则返回 -1。 booleanisEmpty()           如果列表不包含元素,则返回 true。 Iterator<E>iterator()           返回以正确顺序在列表的元素上进行迭代的迭代器。 intlastIndexOf(Object o)           返回列表中最后出现指定元素的索引,如果列表不包含此元素,则返回 -1。 ListIterator<E>listIterator()           返回列表中元素的列表迭代器(以正确的顺序)。 ListIterator<E>listIterator(int index)           返回列表中元素的列表迭代器(以正确的顺序),从列表的指定位置开始。 Eremove(int index)           移除列表中指定位置的元素(可选操作)。 booleanremove(Object o)           移除列表中出现的首个指定元素(可选操作)。 booleanremoveAll(Collection<?> c)           从列表中移除指定 collection 中包含的所有元素(可选操作)。 booleanretainAll(Collection<?> c)           仅在列表中保留指定 collection 中所包含的元素(可选操作)。 Eset(int index, E element)           用指定元素替换列表中指定位置的元素(可选操作)。 intsize()           返回列表中的元素数。 List<E>subList(int fromIndex, int toIndex)           返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。 Object[]toArray()           返回以正确顺序包含列表中的所有元素的数组。<T> T[]toArray(T[] a)           返回以正确顺序包含列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。ArrayList:1)ArrayList采用的是数组结构,对于元素的查找速度很快。但如果经常在集合的中间进行元素的插入或删除,效率较低。booleanadd(E o)           将指定的元素追加到此列表的尾部。 voidadd(int index, E element)           将指定的元素插入此列表中的指定位置。 booleanaddAll(Collection<? extends E> c)           按照指定 Collection 的迭代器所返回的元素顺序,将该 Collection 中的所有元素追加到此列表的尾部。 booleanaddAll(int index, Collection<? extends E> c)           从指定的位置开始,将指定 Collection 中的所有元素插入到此列表中。 voidclear()           移除此列表中的所有元素。 Objectclone()           返回此 ArrayList 实例的浅表复制。 booleancontains(Object elem)           如果此列表中包含指定的元素,则返回 true。 voidensureCapacity(int minCapacity)           如有必要,增加此 ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。 Eget(int index)           返回此列表中指定位置上的元素。 intindexOf(Object elem)           搜索给定参数第一次出现的位置,使用 equals 方法进行相等性测试。 booleanisEmpty()           测试此列表中是否没有元素。 intlastIndexOf(Object elem)           返回指定的对象在列表中最后一次出现的位置索引。 Eremove(int index)           移除此列表中指定位置上的元素。 booleanremove(Object o)           从此列表中移除指定元素的单个实例(如果存在),此操作是可选的。protected  voidremoveRange(int fromIndex, int toIndex)           移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之间的所有元素。 Eset(int index, E element)           用指定的元素替代此列表中指定位置上的元素。 intsize()           返回此列表中的元素数。 Object[]toArray()           返回一个按照正确的顺序包含此列表中所有元素的数组。<T> T[]toArray(T[] a)           返回一个按照正确的顺序包含此列表中所有元素的数组;返回数组的运行时类型就是指定数组的运行时类型。 voidtrimToSize()           将此 ArrayList 实例的容量调整为列表的当前大小。LinkedList:1)LinkedList采用的是链表结构,如果经常在集合的中间进行元素的插入或删除,效率高于ArrayList booleanadd(E o)           将指定元素追加到此列表的结尾。 voidadd(int index, E element)           在此列表中指定的位置插入指定的元素。 booleanaddAll(Collection<? extends E> c)           追加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序。 booleanaddAll(int index, Collection<? extends E> c)           将指定集合中的所有元素从指定位置开始插入此列表。 voidaddFirst(E o)           将给定元素插入此列表的开头。 voidaddLast(E o)           将给定元素追加到此列表的结尾。 voidclear()           从此列表中移除所有元素。 Objectclone()           返回此 LinkedList 的浅表复制。 booleancontains(Object o)           如果此列表包含指定元素,则返回 true。 Eelement()           找到但不移除此列表的头(第一个元素)。 Eget(int index)           返回此列表中指定位置处的元素。 EgetFirst()           返回此列表的第一个元素。 EgetLast()           返回此列表的最后一个元素。 intindexOf(Object o)           返回此列表中首次出现的指定元素的索引,如果列表中不包含此元素,则返回 -1。 intlastIndexOf(Object o)           返回此列表中最后出现的指定元素的索引,如果列表中不包含此元素,则返回 -1。 ListIterator<E>listIterator(int index)           返回此列表中的元素的列表迭代器(按适当顺序),从列表中指定位置开始。 booleanoffer(E o)           将指定元素添加到此列表的末尾(最后一个元素)。 Epeek()           找到但不移除此列表的头(第一个元素)。 Epoll()           找到并移除此列表的头(第一个元素)。 Eremove()           找到并移除此列表的头(第一个元素)。 Eremove(int index)           移除此列表中指定位置处的元素。 booleanremove(Object o)           移除此列表中首次出现的指定元素。 EremoveFirst()           移除并返回此列表的第一个元素。 EremoveLast()           移除并返回此列表的最后一个元素。 Eset(int index, E element)           将此列表中指定位置的元素替换为指定的元素。 intsize()           返回此列表的元素数。 Object[]toArray()           以正确顺序返回包含此列表中所有元素的数组。<T> T[]toArray(T[] a)           以正确顺序返回包含此列表中所有元素的数组;返回数组的运行时类型即为指定数组的类型。Set:1)元素不能重复2)元素有自己的排序规则3)没有索引 booleanadd(E o)           如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。 booleanaddAll(Collection<? extends E> c)           如果 set 中没有指定 collection 中的所有元素,则将其添加到此 set 中(可选操作)。 voidclear()           移除 set 中的所有元素(可选操作)。 booleancontains(Object o)           如果 set 包含指定的元素,则返回 true。 booleancontainsAll(Collection<?> c)           如果此 set 包含指定 collection 的所有元素,则返回 true。 booleanequals(Object o)           比较指定对象与此 set 的相等性。 inthashCode()           返回 set 的哈希码值。 booleanisEmpty()           如果 set 不包含元素,则返回 true。 Iterator<E>iterator()           返回在此 set 中的元素上进行迭代的迭代器。 booleanremove(Object o)           如果 set 中存在指定的元素,则将其移除(可选操作)。 booleanremoveAll(Collection<?> c)           移除 set 中那些包含在指定 collection 中的元素(可选操作)。 booleanretainAll(Collection<?> c)           仅保留 set 中那些包含在指定 collection 中的元素(可选操作)。 intsize()           返回 set 中的元素数(其容量)。 Object[]toArray()           返回一个包含 set 中所有元素的数组。<T> T[]toArray(T[] a)           返回一个包含 set 中所有元素的数组;返回数组的运行时类型是指定数组的类型。HashSet:1)HashSet容器对于元素的顺序管理,是采用哈希码管理的。2)HashSet容器对于元素的重复性的判断:首先根据元素的hashCode()判断两个元素的哈希码值是否相等,如果不等,则认为元素不重复,如果相等再判断equals()方法是否返回true,如果不返回true,则认为元素不重复,否则认为元素重复。 booleanadd(E o)           如果此集合中还不包含指定元素,则添加指定元素。 voidclear()           从此集合中移除所有元素。 Objectclone()           返回此 HashSet 实例的浅表复制:并没有克隆这些元素本身。 booleancontains(Object o)           Returns 如果此集合不包含指定元素,则返回 true。 booleanisEmpty()           如果此集合不包含任何元素,则返回 true。 Iterator<E>iterator()           返回对此集合中元素进行迭代的迭代器。 booleanremove(Object o)           如果指定元素存在于此集合中,则将其移除。 intsize()           返回此集合中的元素的数量(集合的容量)。LinkedHashSet:1)对于元素的重复性判断和HashSet一致2)对于元素的顺序采用链表结构记录,能保证元素的循序性TreeSet:1)TreeSet容器要求放到该容器中的元素必须要实现java.lang.Comparable接口2)TreeSet容器对于元素的重复性判断,是根据Comparable接口中的compareTo()方法是否返回0,作为元素重复性判断依据的。3)TreeSet容器对于元素的排序规则,是采用compareTo()方法的返回值来作为排序依据的。 booleanadd(E o)           将指定的元素添加到 set(如果尚未存在于该 set 中)。 booleanaddAll(Collection<? extends E> c)           将指定 collection 中的所有元素添加到此 set 中。 voidclear()           移除 set 中的所有元素。 Objectclone()           返回 TreeSet 实例的浅表复制(并不克隆元素自身)。 Comparator<? super E>comparator()           返回用于确定已排序 set 顺序的比较器,或者,如果此树 set 使用其元素的自然顺序,则返回 null。 booleancontains(Object o)           如果 set 包含指定的元素,则返回 true。 Efirst()           返回已排序 set 中当前的第一个(最小)元素。 SortedSet<E>headSet(E toElement)           返回此 set 的部分视图,要求其元素严格小于 toElement。 booleanisEmpty()           如果 set 不包含元素,则返回 true。 Iterator<E>iterator()           返回对此 set 中的元素进行迭代的迭代器。 Elast()           返回已排序 set 中当前的最后一个(最大)元素。 booleanremove(Object o)           将指定的元素从 set 中移除(如果该元素存在于此 set 中)。 intsize()           返回 set 中的元素个数(其容量)。 SortedSet<E>subSet(E fromElement, E toElement)           返回此 set 的部分视图,其元素从 fromElement(包括)到 toElement(不包括)。 SortedSet<E>tailSet(E fromElement)           返回 set 的部分视图,其元素大于或等于 fromElement。Map:Map容器对于元素采用的是键值对的方式管理,我们又称为key-value形式key必须唯一,value可以重复Map容器对应元素操作,都是通过key来进行的 voidclear()           从此映射中移除所有映射关系(可选操作)。 booleancontainsKey(Object key)           如果此映射包含指定键的映射关系,则返回 true。 booleancontainsValue(Object value)           如果此映射为指定值映射一个或多个键,则返回 true。 Set<Map.Entry<K,V>>entrySet()           返回此映射中包含的映射关系的 set 视图。 booleanequals(Object o)           比较指定的对象与此映射是否相等。 Vget(Object key)           返回此映射中映射到指定键的值。 inthashCode()           返回此映射的哈希码值。 booleanisEmpty()           如果此映射未包含键-值映射关系,则返回 true。 Set<K>keySet()           返回此映射中包含的键的 set 视图。 Vput(K key, V value)           将指定的值与此映射中的指定键相关联(可选操作)。 voidputAll(Map<? extends K,? extends V> t)           从指定映射中将所有映射关系复制到此映射中(可选操作)。 Vremove(Object key)           如果存在此键的映射关系,则将其从映射中移除(可选操作)。 intsize()           返回此映射中的键-值映射关系数。 Collection<V>values()           返回此映射中包含的值的 collection 视图。HashMap:1)HashMap对于key的顺序是根据key的哈希码排序的2)HashMap对于key的重复性判断,是首先根据key的hashCode()判断两个key的哈希码值是否相等,如果不等,则认为key不重复,如果相等再判断equals()方法是否返回true,如果不返回true,则认为key不重复,否则认为key重复。 voidclear()           从此映射中移除所有映射关系。 Objectclone()           返回此 HashMap 实例的浅表复制:并不克隆键和值本身。 booleancontainsKey(Object key)           如果此映射包含对于指定的键的映射关系,则返回 true。 booleancontainsValue(Object value)           如果此映射将一个或多个键映射到指定值,则返回 true。 Set<Map.Entry<K,V>>entrySet()           返回此映射所包含的映射关系的 collection 视图。 Vget(Object key)           返回指定键在此标识哈希映射中所映射的值,如果对于此键来说,映射不包含任何映射关系,则返回 null。 booleanisEmpty()           如果此映射不包含键-值映射关系,则返回 true。 Set<K>keySet()           返回此映射中所包含的键的 set 视图。 Vput(K key, V value)           在此映射中关联指定值与指定键。 voidputAll(Map<? extends K,? extends V> m)           将指定映射的所有映射关系复制到此映射中,这些映射关系将替换此映射目前针对指定映射的所有键的所有映射关系。 Vremove(Object key)           如果此映射中存在该键的映射关系,则将其删除。 intsize()           返回此映射中的键-值映射关系数。 Collection<V>values()           返回此映射所包含的值的 collection 视图。LinkedHashMap:1)对于key的重复性判断和HashMap一致2)对于key的顺序采用链表结构记录,能保证key的循序性 voidclear()           从该映射中移除所有映射关系。 booleancontainsValue(Object value)           如果此映射将一个或多个键映射到指定值,则返回 true。 Vget(Object key)           返回此映射中映射到指定键的值。protected  booleanremoveEldestEntry(Map.Entry<K,V> eldest)           如果此映射移除其最旧的条目,则返回 true。TreeMap:1)TreeMap容器要求放到该容器中的key必须要实现java.lang.Comparable接口2)TreeMap容器对于key的重复性判断,是根据Comparable接口中的compareTo()方法是否返回0,作为key重复性判断依据的。3)TreeMap容器对于key的排序规则,是采用compareTo()方法的返回值来作为排序依据的。 voidclear()           从此 TreeMap 中删除所有映射关系。 Objectclone()           返回 TreeMap 实例的浅表复制。 Comparator<? super K>comparator()           返回用于对此映射进行排序的比较器,如果此映射使用它的键的自然顺序,则返回 null。 booleancontainsKey(Object key)           如果此映射包含对于指定的键的映射关系,则返回 true。 booleancontainsValue(Object value)           如果此映射把一个或多个键映射到指定值,则返回 true。 Set<Map.Entry<K,V>>entrySet()           返回此映射所包含的映射关系的 set 视图。 KfirstKey()           返回有序映射中当前第一个(最小的)键。 Vget(Object key)           返回此映射中映射到指定键的值。 SortedMap<K,V>headMap(K toKey)           返回此映射的部分视图,其键严格小于 toKey。 Set<K>keySet()           返回此映射中所包含的键的 Set 视图。 KlastKey()           返回有序映射中当前最后一个(最大的)键。 Vput(K key, V value)           在此映射中关联指定值与指定键。 voidputAll(Map<? extends K,? extends V> map)           将指定映射中所有映射关系复制到此映射中。 Vremove(Object key)           如果此 TreeMap 中存在该键的映射关系,则将其移除。 intsize()           返回此映射中的键-值映射关系数。 SortedMap<K,V>subMap(K fromKey, K toKey)           返回此映射的部分视图,其键值从 fromKey(包括)到 toKey(不包括)。 SortedMap<K,V>tailMap(K fromKey)           返回映射的部分视图,其键大于或等于 fromKey。 Collection<V>values()           返回此 Map 中所包含的值的 collection 视图。

0 0
原创粉丝点击