黑马程序员——Java集合之Collection

来源:互联网 发布:excel删除重复数据 编辑:程序博客网 时间:2024/06/07 23:35

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

集合的特点

1、集合是专门存储对象的容器
2、集合的长度可变
3、不可以存储基本数据类型


集合类的add方法的参数类型是Object,以便于接收任意对象
集合中存储的都是对象的引用,即对象的地址


Collection中包含两个子接口List和Set,List中元素的有序的,可以重复,因为该集合体系有索引,Set集合是无序的,元素不可重复。有序和无序说的是存入和取出的顺序是不是一致。
 

Collection集合中常用的方法有添加元素 add(Object obj)、删除元素remove(Object obj)、清空集合clear()、判断是否存在某个元素contains(Object obj)、判断是否为空isEmpty(),获取集合的长度size()


Collection集合遍历元素的方式为获取其iterator迭代器,在根据迭代器的boolean hasNext()和E next()方法进行迭代,next()方法的返回值类型是Object,所以要做类型转换。常用的两种方式为
   List l = new ArrayList();
   方式一
   获取其迭代器对象
   Iterator it = l.iterator;   
   while(it.hasNext()){
        System.out.println(it.next());
   }
   方式二
   for(Iterator it = l.iterator;it.hasNext(); ){
   System.out.println(it.next());
   }


List集合中常用的两个集合为ArrayList和LinkedList
   ArrayList的底层是数组结构,凡是可以操作角标的方法都是该体系的特有方法
   在指定位置添加元素add(index,element),删除指定位置的元素remove(index),修改指定位置的元素set(index),查询get(index),subList(from,to)。
Iterator迭代器是依赖Collection而存在的,在迭代的过程中不能对集合进行操作,因为他们两个是相互依存的,若改变了集合的属性,而不告诉迭代器,就会报错。而ArrayList有一个特有的迭代器对象,即listIterator,是Iterator的子接口,它可以在迭代对集合进行操作。
   LinkedList的底层数据结构是链表
   addFirst()和addLast()方法分别在头和尾添加元素,getFirst()和getLast()方法分别获取头和尾的元素,removeFirst()和removeLast()分别移除头和尾的元素。JDK1.6后又出
现了peek:获取但不删除和poll:获取并移除,若空则都返回null。
 
下面是用LinkedList模拟了一个队列结构,先进先出

其输出结果


Set集合中常用的两个集合为HashSet和TreeSet

        HashSet的底层数据结构是哈希表,线程非同步的,对于判断元素是否存在和删除等操作,通过HashCode()和equals()来保证元素的唯一性。若某对象存进HashSet后就不能修改其参与哈希值的字段了。

        TreeSet的底层数据结构是二叉树结构,线程不同步的,可对Set集合中的元素进行排序,必须具备比较性才能存入,保证元素唯一性的依据是compareTo方法。

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

        TreeSet排序的第一种方法:让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法,这种方式也成为元素的自然顺序。

程序代码演示如下

其结果为

     TreeSet排序的第二种方式,当元素自身不具备比较性,或其比较性不是所需要的,这时就让集合自身具备比较性,在集合初始化时,就有了比较方式,当两种排序都存在时,会以比较器为主。其方法为定义一个类,实现Comparator接口,覆盖compare方法,然后将该类对象作为参数传递给TreeSet集合的构造函数

程序代码仍然以上面的为主,只不过这次传入了比较器,结果就按照比较器定义的内容输出结果了



其结果为


选择集合的判断方法

要唯一么?

   需要:Set

        要指定顺序么?

             需要:TreeSet

             不需要:HashSet

             和存储一致的顺序LinkedHashSet

   不需要:List

         是否频繁增删?

             是:LinkedList

             否:ArrayList


0 0