集合(Collection)

来源:互联网 发布:儿童网络教育 编辑:程序博客网 时间:2024/06/10 23:35

集合(Collection)(掌握)

(1)集合的由来?

    我们学习的是Java -- 面向对象 -- 操作很多对象 -- 存储 -- 容器(数组和StringBuffer) -- 数组    而数组的长度固定,所以不适合做变化的需求,Java就提供了集合供我们使用。

(2)集合和数组的区别?

    A:长度区别        数组固定        集合可变    B:内容区别        数组可以是基本类型,也可以是引用类型        集合只能是引用类型    C:元素内容        数组只能存储同一种类型        集合可以存储不同类型(其实集合一般存储的也是同一种类型)

(3)集合的继承体系结构?

    由于需求不同,Java就提供了不同的集合类。这多个集合类的数据结构不同,但是它们都是要提供存储和遍历功能的,    我们把它们的共性不断的向上提取,最终就形成了集合的继承体系结构图。    Collection        |--List            |--ArrayList            |--Vector            |--LinkedList        |--Set            |--HashSet            |--TreeSet

(4)Collection的功能概述

    A:添加功能    B:删除功能    C:判断功能    D:获取功能    E:长度功能    F:交集(了解)    G:把集合转数组(了解)

1.集合(List)(掌握)

(1)List是Collection的子接口

    特点:有序(存储顺序和取出顺序一致),可重复。

(2)List的特有功能

    A:添加功能    B:删除功能    C:获取功能    D:迭代器功能    E:修改功能

(3)List集合的特有遍历功能

    A:由size()和get()结合。    B:代码演示                //创建集合对象                List list = new ArrayList();                //创建并添加元素                list.add("hello");                list.add("world");                list.add("java");                //遍历集合                Iterator it = list.iterator();                while(it.hasNext()) {                    String s =(String) it.next();                    System.out.println(s);                }                System.out.println("----------");                for(int x=0; x<list.size(); x++) {                    String s =(String) list.get(x);                    System.out.println(s);                }

(4)列表迭代器的特有功能;(了解)

    可以逆向遍历,但是要先正向遍历,所以无意义,基本不使用。

(5)并发修改异常

    A:出现的现象        迭代器遍历集合,集合修改集合元素    B:原因        迭代器是依赖于集合的,而集合的改变迭代器并不知道。    C:解决方案        a:迭代器遍历,迭代器修改(ListIterator)            元素添加在刚才迭代的位置        b:集合遍历,集合修改(size()和get())            元素添加在集合的末尾

(6)常见数据结构

    A:栈 先进后出    B:队列 先进先出    C:数组 查询快,增删慢    D:链表 查询慢,增删快

ArrayList

    底层数据结构是数组,查询快,增删慢。    线程不安全,效率高。    A:没有特有功能需要学习

Vector

    底层数据结构是数组,查询快,增删慢。    线程安全,效率低。    A:有特有功能        a:添加            public void addElement(E obj)       --  add()        b:获取            public E elementAt(int index)       --  get()            public Enumeration<E> elements()    --  iterator()

LinkedList

    底层数据结构是链表,查询慢,增删快。    线程不安全,效率高。    到底使用谁呢?看需求?    分析:        要安全吗?            要:Vector(即使要,也不使用这个,后面再说)            不要:ArrayList或者LinkedList                查询多;ArrayList                增删多:LinkedList    什么都不知道,就用ArrayList。    A:有特有功能         a:添加            addFirst()            addLast()        b:删除            removeFirst()            removeLast()        c:获取            getFirst()            getLast()

2.Set集合(理解)

(1)Set集合的特点

    无序,唯一

(2)HashSet集合(掌握)

    A:底层数据结构是哈希表(是一个元素为链表的数组)    B:哈希表底层依赖两个方法:hashCode()和equals()      执行顺序:        首先比较哈希值是否相同            相同:继续执行equals()方法                返回true:元素重复了,不添加                返回false:直接把元素添加到集合            不同:就直接把元素添加到集合    C:如何保证元素唯一性的呢?        由hashCode()和equals()保证的    D:开发的时候,代码非常的简单,自动生成即可。    E:HashSet存储字符串并遍历    F:HashSet存储自定义对象并遍历(对象的成员变量值相同即为同一个元素)

(3)TreeSet集合

    A:底层数据结构是红黑树(是一个自平衡的二叉树)    B:保证元素的排序方式        a:自然排序(元素具备比较性)            让元素所属的类实现Comparable接口        b:比较器排序(集合具备比较性)            让集合构造方法接收Comparator的实现类对象    C:把我们讲过的代码看一遍即可     

3:Collection集合总结(掌握)

### **Collection** ###    |--List 有序,可重复        |--ArrayList            底层数据结构是数组,查询快,增删慢。            线程不安全,效率高        |--Vector            底层数据结构是数组,查询快,增删慢。            线程安全,效率低        |--LinkedList            底层数据结构是链表,查询慢,增删快。            线程不安全,效率高    |--Set  无序,唯一        |--HashSet            底层数据结构是哈希表。            如何保证元素唯一性的呢?                依赖两个方法:hashCode()和equals()                开发中自动生成这两个方法即可            |--LinkedHashSet                底层数据结构是链表和哈希表                由链表保证元素有序                由哈希表保证元素唯一        |--TreeSet            底层数据结构是红黑树。            如何保证元素排序的呢?                自然排序                比较器排序            如何保证元素唯一性的呢?                根据比较的返回值是否是0来决定

4:针对Collection集合我们到底使用谁呢?(掌握)

唯一吗?    是:Set        排序吗?            是:TreeSet            否:HashSet    如果你知道是Set,但是不知道是哪个Set,就用HashSet。    否:List        要安全吗?            是:Vector            否:ArrayList或者LinkedList                查询多:ArrayList                增删多:LinkedList    如果你知道是List,但是不知道是哪个List,就用ArrayList。如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。如果你知道用集合,就用ArrayList。

5:在集合中常见的数据结构(掌握)

ArrayXxx:底层数据结构是数组,查询快,增删慢LinkedXxx:底层数据结构是链表,查询慢,增删快HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序

Map(掌握)

(1)将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

(2)Map和Collection的区别?

    A:Map 存储的是键值对形式的元素,键唯一,值可以重复。夫妻对    B:Collection 存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。光棍

(3)Map接口功能概述

    A:添加功能    B:删除功能    C:判断功能    D:获取功能    E:长度功能

(4)Map集合的遍历

    A:键找值        a:获取所有键的集合        b:遍历键的集合,得到每一个键        c:根据键到集合中去找值    B:键值对对象找键和值        a:获取所有的键值对对象的集合        b:遍历键值对对象的集合,获取每一个键值对对象        c:根据键值对对象去获取键和值    代码体现:
    Map<String,String> hm = new HashMap<String,String>();    hm.put("it002","hello");    hm.put("it003","world");    hm.put("it001","java");
    //方式1 键找值
Set<String> set = hm.keySet();for(String key : set) {    String value = hm.get(key);    System.out.println(key+"---"+value);}
    //方式2 键值对对象找键和值
Set<Map.Entry<String,String>> set2 = hm.entrySet();    for(Map.Entry<String,String> me : set2) {        String key = me.getKey();        String value = me.getValue();        System.out.println(key+"---"+value);    }

    • 集合Collection掌握
      • 1集合的由来
      • 2集合和数组的区别
      • 3集合的继承体系结构
      • 4Collection的功能概述
    • 集合List掌握
      • 1List是Collection的子接口
      • 2List的特有功能
      • 3List集合的特有遍历功能
      • 4列表迭代器的特有功能了解
      • 5并发修改异常
      • 6常见数据结构
      • ArrayList
      • Vector
      • LinkedList
    • Set集合理解
      • 1Set集合的特点
      • 2HashSet集合掌握
      • 3TreeSet集合
    • 3Collection集合总结掌握
      • 4针对Collection集合我们到底使用谁呢掌握
      • 5在集合中常见的数据结构掌握
    • Map掌握
      • 1将键映射到值的对象一个映射不能包含重复的键每个键最多只能映射到一个值
      • 2Map和Collection的区别
      • 3Map接口功能概述
      • 4Map集合的遍历

0 0
原创粉丝点击