Set是一个有趣的集合。它看起来有点像List,实际操作却有点像Map。Set也是记录一系列值的集合,但是呢,它和Map的key相同,它不能重复,否则会插入失败。所以呢,我们经常可以看见在Map中可以调用keySet()。说到这呢,它貌似就已经能做很多事了。假如你有兴趣做网络爬虫的话,有一个过滤重复链接的问题就不得不考虑了。Set貌似就是一个非常简单的解决办法了,我们可以用它来去重。
好了,我们来看看它的一写方法吧:
boolean add(E element) //添加新元素element,假如Set中已经包含相同的元素则返回false,成功返回true boolean addAll(Collection<? extends E> c) //将集合中所有元素添加到Set中,返回true表示添加成功 boolean remove(Object o) //移除指定元素,假如Set中包含该元素,则返回true
HashSet类
Hash我们说得不少了,他呢,是一个链表数组,每个链表称为桶。通过调用hashCode()我们能就可以计算出他在哪个捅了,即hashCode%总桶数。确定了哪个桶还不够,因为在同一桶中,可能是相同元素,也可能是只是通过hashCode计算在同一桶中而已,通过调用equasl()就能知道是不是在同一桶中了。假如我们写一个类,重写hashCode().是它总是返回true,则他就仅仅而是一个LinkedList而已,并且还多了一些步骤,所以效率肯定是非常底下的。和之前一样,你可以指定一个初始大小,和装填因子。系统默认初始大小是16,装填因子0.75.我们指定初始大小时,系统会自动转化成2的下一个幂,而我们一开始把它初始化多大呢,推荐75%~150%。
TreeSet类
它是一个有序集合(sorted collection),可以将元素插入集合中,输出时按照一定的顺序。既然是有序,所以它是需要比较方法的,你可以在传入的类中实现Comparale接口,或者直接传入一个Comparator接口的实现类。用法与之前介绍的类似。
java.uitl.SortedSet<E>接口 Comparator<? extends E>comparator() //获取用于对元素进行排序的比较器,如果元素用Comparable实现的compareTo方法,则返回null E first() E last() //返回集合中最大或最小元素 java.util.NavigableSet<E> E higer(E value) E lower(E value) //返回大于value的最小元素或者小于value的最大元素。如果没有合适元素返回null E ceilling(E value) E floor(E value) //返回大于等于value的最小元素或者小于等于value的最大元素。没有合适的返回null E pollFirst() E pollLast() //删除并返回这个集合中最大或最小元素。为空时返回null Iterator<E> descendingIterator() //返回一个按照递减顺序遍历集合的迭代器
我们来看看它的接口:
java.uitl.Queue<E>接口: boolean add(E element) boolean offer(E element) //如果队列没有满,将给定的元素添加到双端队列的尾部并返回true。如果队列满了,第一个方法将跑出IllegalStateException,第二个则返回false E remove() E poll() //假如队列不空,删除并返回这个队列头部的元素,如果队列是空的,第一个将抛出NoSuchElementException,第二个方法返回null E element() E peek() //假如队列不空,返回这个队列的头部元素。假如为空,第一个将抛出NoSuchElementException,第二个方法返回null java.util.Deque<E>接口: void addFirst(E element) void addLast(E element) boolean offerFirst(E element) boolean offerLast(E element) //将指定元素添加至对头或者队尾。如果队满,前两个将抛出IllegalStateException,后两个返回false E removeFirst() E removeLast() E pollFirst() E pollLast() //如果队列不空,删除并返回队头或者队尾。假如队空,前两个方法将抛出IllegalStatusException,后两个将返回false E getFirst() E getLast() E peekFirst() E peekLast() //如果队非空,返回队头或者队尾元素,假如为空,前两个将抛出NoSuchElementException,后两个将返回nullQueue呢,则是我们默认理解的队列,即只有一个头,一个尾;而Deque是一个双头队列,而我们的LInkedList则是它的一个实现类
我觉得他还是一个蛮好玩的东西。我们随意插入元素,然后可以按照我们需要的顺序输出。
好了,看了这,需要提示一个 一帮来说add,get,element....父类的方法在不满足的条件的情况下,一般时抛出异常的,而子类自己的peek,poll,offer..等等的方法一般则是直接返回false。
原文地址:http://blog.csdn.net/u010233260/article/details/44875243