集合框架(collection)

Collection:

  |--List:元素是有序的,元素可以重复,因为该集合体系有索引。

    |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快,但是增删稍慢。线程不同步。

    |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。

    |--Vector:底层是数组数据结构。线程同步,速度都慢,已经被ArrayList替代了。

  |--Set:元素是无序的(存入和取出的顺序不一定一致),元素不可以重复。

    |--HashSet:底层数据结构是哈希表。线程是非同步的。

           保证元素唯一性的原理:判断元素的hashSet值是否相同。

           如果相同,还会继续判断元素的equals方法,是否为true.

    |--TreeSet:可以对Set集合中的元素进行排序。

           记住,排序时,当主要条件相同时,一定判断一下次要条件。

           底层数据结构是二叉树。

           保证元素唯一的依据:compareTo方法return 0

            TreeSet排序的第一种方式:让元素自身具备比较性。

            元素需要实现Comparable接口,覆盖Comparable方法。

            这种方法也成为元素的自然顺序,或者叫做默认顺序。

          TreeSet的第二种排序方式。

          当元素自身不具备比较性时,或者具备的比较性不是需要的。

          这时就需要让集合自身具备比较性。

          在聚合初始化时,就有了比较方式。

          

          当两种排序都存在时,以比较器为主。

          定义一个类,实现Comparator接口,覆盖compare方法。

 

Set集合的功能和Collection功能方法一样。

 

List:

  特有方法,凡是可以操作角标的方法都是该体系结构特有的方法。

  add(index,element);

  addAll(index,Collection);

  remove(index);

  set(index,element);

  get(index);

  subList(from,to);

  listIterator();

  int indexOf(obj);//获取指定元素的位置。

  ListIterator listIterator();

 

List集合特有的迭代器,ListIterator是Iterator的子接口。

在迭代时,不可以通过集合对象的方法操作集合中的元素。

因为会发生ConcurrentModificationException异常。

所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的。

只能对元素进行判断(hasNext()),取出(next()),删除(removed())的操作,

如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。

该接口只能通过List集合的listIterator方法获取。

 

枚举:枚举就是vector特有的取出方式。vextor的取出方式有枚举、遍历(也就是get(index))、按角标索引、迭代器。

其实枚举和迭代是一样的。为什么出迭代那,因为枚举的名称以及方法的名称都过长,所以被迭代取代啦,枚举郁郁而终了。

 

LinkedList:特有的方法:

  addFirst();

  addLast();

  getFirst();

  getLast();//只得到数据、

  removeFirst();

  removeLast();//不仅取出,而且还删除数据。

  isEmpty();

因为这涉及到一个很重要的面试题:LinkedList link=new LinkedList();

                link.addFirst("1");  

                link.addFirst("2");

                link.addFirst("3");   则该link的输出结果为3、2、1

            (2)  link.addLast("1");

                link.addLast("2");则该输出结果为1、2          如果集合中没有元素,会出现NoSuchElementException

 但是在jdk1.6出现了替代方法。

  offerFirst();

  offerLast();

  增加元素。

  peekFirst();

  peekLast();

获取元素,但不删除元素,如果集合中没有元素,会返回null。

  pollFirst();

  pollLast();

获取元素,但是元素被删除,如果集合中没有元素,会返回null。

posted @ 2015-04-07 17:52  剑芒  阅读(126)  评论(0编辑  收藏  举报