【Java基础】04_集合框架

一、java中集合了类的关系图【简化版】

注:

虚线矩形表示接口

实线矩形表示具体实现类

实线矩形加粗表示具体实现类使用频率高,作为重点掌握

 

集合是存储多个元素的容器,但是,由于数据结构不同,java就提供了多种集合类。

而这多种集合类有共性的功能,所以,通过不断的向上抽取,最终形成了集合体系结构。

 

二、集合与数组的异同(面试题)

1.相同点

    他们都是容器,都可以储存数据。

2.区别

 

  长度区别

      数组固定:数组对象创建时,长度就固定

    集合可变:集合可以随着存储元素个数的变化,长度发生变化

  存储元素类型区别

      数组即可以储存基本数据类型,也可以储存引用数据类型。

    集合只能存储引用数据类型。

  是否存储同一类型区别

      数组存储元素类型必须一致。

    集合元素类型可以不一致。通过泛型可以限制集合的存储元素类型

 

三、单列集合继承体系

 

 

Collection(单列集合)

|—— List(元素存取有序,有索引,可以重复)

|   |—— ArrayList

|   |   底层是数组实现的,线程不安全,查找和修改快,增和删比较慢

|   |—— LinkedList

|   |   底层是链表实现的,线程不安全,增和删快,查找和修改比较慢

|   |—— Vector

|   |   底层是数组实现的,线程安全,无论增删改查都慢

|   |—— 使用场景

|           |—— 如果查找和修改多,ArrayList

|           |—— 如果增和删多,LinkedList

|           |—— 如果都多,ArrayList

|

|—— Set(元素存取无序,无索引,不可以重复)

|—— HashSet

|       |    底层是哈希算法实现

|     |—— LinkedHashSet

|             底层是链表实现,保证元素存取顺序,但是也是可以保证元素唯一,HashSet原理一样

|—— TreeSet

|   底层是二叉树算法实现

|—— 使用

    一般在开发的时候不需要对存储的元素排序,大多用HashSet,HashSet的效率比较高

 

四、双列集合继承体系

Map(双列集合)

    |—— HashMap

    |      | 底层是哈希算法,针对键有效

    |      |—— LinkedHashMap

    |             底层是链表,针对键有效

    |—— TreeMap

    |       底层是二叉树算法,针对键有效

  |—— 使用场景

           开发中用HashMap比较多有效

 

五、继承体系学习方法

    学习顶层:因为顶层定义的是共性内容。举例:水杯

    使用底层:因为底层才是具体实现。举例:正方形水杯。椭圆形水杯

 

集合的常见使用步骤(四步走)

    A:创建集合对象

    B:创建元素对象

    C:添加元素对象到集合对象中

    D:遍历集合对象中的元素对象

        1、通过集合对象获取迭代器对象。

        2、通过迭代器对象的hasNext()方法判断是否有元素。

        3、通过迭代器对象的next()方法获取元素并移动到下一个元素。

      获取返回值为【Object对象】,需向下转型,使用子类对象的方法

 

六、java.util.Collection<E>接口.共性方法

 

1添加功能(掌握)

  1. boolean add(Object obj):

    向集合中添加一个元素。

 

   2.boolean addAll(Collection c):

    向集合中添加传入集合的所有元素。

2删除功能(掌握)

  1. void clear():

    清空集合中所有的元素。

  2. boolean remove(Object obj):

    删除集合中第一次出现的指定元素对象。

 

  3. boolean removeAll(Collection c):

    删除集合中指定的集合元素。相当于去交集。

    只要有【一个】元素被移除了,就返回true

3判断功能(掌握)

  1. boolean isEmpty():

    判断集合是否为空。

  2. boolean contains(Object obj):

    判断集合是否包含指定的元素。

 

  3. boolean containsAll(Collection c):

    判断集合是否包含指定的集合中的【所有】元素。

    对比记忆:

    String的判断功能也有isEmpty()contains()

4遍历功能(掌握)

  Iterator iterator():获取迭代器。Collection类集合的专用遍历方式。

Iterator接口中的方法

  1. boolean hasNext():

    判断是否还有下一元素,有就返回true

  2. Object next():

    返回值为Object获取元素,并移动指针到下一个位置。

    不要多次使用it.next()方法,因为每次使用都是访问下一个对象。

    可能报出:NoSuchElementException 没有这样的元素异常。

    当你已经获取到元素末尾了,你还要获取,已经没有元素了,所以报错。

  3. void remove():

    从迭代器指向的Collection中移除迭代到当前元素

    每次调用 next() 只能调用一次此方法。

5长度功能(掌握)

int size():

获得集合的元素个数。

对比记忆:

  数组:属性array.length

  StringStringBuffer:方法length();

6交集功能(了解)

boolean retainAll(Collection c):

判断集合中是否有相同的元素。取交集的意思。

原集合改变,返回true

当对象集合是参数集合的子集,那么会返回false,因为原集合对象未发生改。

思考:

    boolean retainAll(Collection c):

两个集合都有的元素?思考元素去哪了,返回的boolean又是什么意思呢?

    //假设有两个集合AB

    //AB做交集,最终的结果保存在A中,B不变。

    //返回值表示的是A是否发生过改变。

 

7转换功能(掌握)

Object[] toArray():

把集合变成数组。遍历集合的一种方式。

注意返回为Object数组,需要向下转型,举例:String s = (String) objs[x];

 

数组转成集合的方式:

    java.util.Arrays;

        public static <T> List<T> asList(T... a)返回一个受指定数组支持的固定长度大小的集合。

 

七、java.util.List<E>接口(特有方法与索引有关)

public interface List<E> extends Collection<E>

有序的 collection(也称为序列)。

此接口的用户可以对列表中每个元素的插入位置进行精确地控制。

用户可以根据元素的整数索引(在列表中的位置)访问元素,

并搜索列表中的元素。

set 不同,列表通常允许重复的元素。

1 List的特点

1. 有序(存储和取出的顺序一致)

2. 元素可以重复

3. 可以通过索引值操作对应位置的元素

2添加功能

  1. void add(int index,Object obj):

    在指定的索引位置增加插入指定的元素

    注意:

    Collection中的add方法返回值为boolean

    IndexOutOfBoundsException -如果索引超出范围 (index < 0 || index > size())

    ClassCastException - 如果指定元素的类不允许它添加到此列表

 

  2. boolean addAll(int index, Collection c)

    在指定的索引位增加一个集合的一堆元素

3删除功能

Object remove(int index):

删除指定索引位置的元素,返回被删除的元素

4修改功能

Object set(int index,Object obj):

将指定索引位置的元素替换为指定元素,返回原元素

5获取功能

  1. Object get(int index):

    获取指定索引位置的元素

    特殊用法:

    结合普通for循环和size()方法,可以遍历List集合或者其子类

  2. int indexOf(Object obj):

    获取指定元素第一次出现的索引位置

  3. int lastIndexOf(Object o)

    获取指定元素在集合中最后出现的索引

  4. ListIterator listIterator():

    获取列表迭代器

    可以遍历集合,在遍历的过程中,对集合元素做出修改和增删

6截取功能

List<E> subList(int fromIndex, int toIndex)

返回一个子集,从指定索引开始(包括),到指定索引结束(不包括)

7小结

List集合特有遍历方式

普通for循环+int size()方法+Object get(int index)方法+向下转型

可以遍历List集合及其子类,遍历过程中可以使用集合对象操作元素对象

总结

List接口的特有方法都与索引index有关

注意:方法的返回值为Object的居多

 

posted @ 2016-12-24 00:49  蜂鸟先生  阅读(295)  评论(0编辑  收藏  举报