A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lwen 中级黑马   /  2015-7-12 09:37  /  364 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1:集合(理解)
        (1)java是一种面向对象语言,如果我们要针对多个对象进行操作,就必须对多个对象进行存储。
           而对多个元素进行存储,前面我们学习过数组,数组的弊端,长度固定。这样,数组将不能
           满足变化的要求。所以,java就提供了集合供我们使用。
        (2)集合的特点:
                1、长度可以发生改变
                2、只能存储对象
                3、可以存储多种类型对象(一般存储的还是同一种)
        (3)集合和数组的区别
                1、长度问题
                        数组固定
                        集合可变
                2、存储元素问题
                        数组可以是基本类型,也可以是引用类型。
                        集合只能是引用类型。
                3、是否同一类型
                        数组元素类型一致。
                        集合元素类型可以不一致。
        (4)集合体系的由来
                集合是存储多个元素的容器,但是,由于数据结构不同,java就提供了多种集合类。
                而这多种集合类有共性的功能,所以,通过不断的向上抽取,最终形成了集合体系
                结构。

                数据结构:数据存储的方式。
                程序 = 算法 + 数据结构

                Collection:接口
                        |--List:接口
                                |--ArrayList
                                |--Vector
                                |--LinkedList
                        |--Set:接口
                                |--HashSet
                                |--TreeSet
Map:接口
|--HashMap
|--TreeMap
|--Hashtable
        (5)如何学习和使用一个继承体系呢?
                学习顶层:因为顶层定义的是共性内容。
                使用底层:因为底层才是具体的实现。

2:Collection的功能(掌握)
        (1)Collection的功能
                1、添加功能(掌握)
                        boolean add(Object obj):向集合中添加一个元素。
                        boolean addAll(Collection c):向集合中添加一个集合的元素。
                2、删除功能(掌握)
                        void clear():删除集合中所有的元素。
                        boolean remove(Object obj):删除集合中指定的元素。
                        boolean removeAll(Collection c):删除集合中指定的集合元素。
                3、判断功能(掌握)
                        boolean isEmpty():判断集合是否为空。
                        boolean contains(Object obj):判断集合是否包含指定的元素。
                        boolean containsAll(Collection c):判断集合是否包含指定的集合中的元素。
                4、遍历功能(掌握)
                        Iterator iterator():迭代器。
                                hasNext():判断是否还有元素
                                next():获取下一个元素
list集合特有迭代器
ListIterator listIterator():List集合特有迭代器,是Iterator的子类
hasPrevious():逆向遍历的时候用来判断集合中是否还有元素
previous():逆向遍历时用来获取前一个元素
void add(E e):迭代的时候,将指定的元素插入列表
void set(E e):用指定元素替换 next 或 previous 返回的最后一个元素

                5、长度功能(掌握)
                        int size():获得集合的元素个数。
                6、交集功能
                        boolean retainAll(Collection c):仅保留两个集合中的交集元素。
                7、转换功能
                        Object[] toArray():把集合变成数组。
        (2)迭代器的使用
                1、使用步骤
                        1、通过集合对象获取迭代器对象。
                        2、通过迭代器对象判断。
                        3、通过迭代器对象获取。
                2、迭代器原理
                        由于多种集合的数据结构不同,所以存储方式不同,所以,取出方式也不同。
                        这个时候,我们就把判断和获取功能定义在了一个接口中,将来,遍历哪种
                        集合的时候,只要该集合内部实现这个接口即可。
3:Collection体系的集合总结
        Collection具体实现类的数据结构及特点
                |--List 有序,不唯一
                        |--ArrayList
                                底层数据结构是数组,查询快,增删慢
                                线程不安全,效率高。
                        |--LinkedList
                                底层数据结构是链表,查询慢,增删快
                                线程不安全,效率高。
                        |--Vector
                                底层数据结构是数组,查询快,增删慢
                                线程安全,效率低。
                |--Set 唯一 无序
                        |--HashSet
                                底层数据结构是哈希表。
                                如何保证元素唯一性呢?
                                依赖两个方法。hashCode()和equals()。
                                以后都自动生成。
                        |--TreeSet
                                底层数据结构是二叉树。
                                如何保证元素唯一性呢?如何保证元素排序呢?       
                                根据返回值是否是0,判断元素是否重复。
                                排序有两种方案:
                                        元素具备比较性 实现Comparable接口
                                        集合具备比较性 实现Comparator接口
4:Set接口以及常用实现类的详细特点
        1:Set的特点:
                元素无序,唯一。
        注意:这里的顺序是指存储和取出顺序。

2:HashSet(掌握)
        (1)HashSet:不保证元素的迭代顺序。并且,不保证该顺序恒久不变。
        (2)怎么保证的呢?
                HashSet底层数据结构是哈希表。
                它依赖两个方法:hashCode()和equals()
                顺序:
                        首先,判断hashCode()值是否相同。
                                相同:
                                        继续走equals()方法,根据其返回值:
                                                true:说明元素重复,不添加到集合。
                                                false:说明元素不重复,添加到集合。
                                不同:直接添加到集合。
        (3)怎么重写hashCode()和equals()方法呢?(忘了吧)
                hashCode():
                        把对象的所有成员变量值相加即可。
                        如果是基本类型,就加值。如果是引用类型,就加哈希值。
                equals():
                        A:this==obj
                        B:!(obj instanceof Student)
                        C:所有成员变量的值比较。基本类型用==,引用类型用equals()。

                如果不会,自动生成。
        (4)案例:(掌握)
                HashSet存储字符串并遍历
                HashSet存储自定义对象并遍历
                        针对自定义对象:
                                需求:如果对象的成员都相同,我们就认为是同一个元素。

3:TreeSet(理解)
        (1)TreeSet:根据构造方法的不用,选择使用自然排序或者比较器排序。
                    按照实际的需求,可以对元素进行排序。并且保证唯一。
        (2)怎么保证的呢?
                排序:底层结构是二叉树。按照树节点进行存储和取出。
                        两种实现:
                                A:自然排序(元素具备比较性)
                                        TreeSet的无参构造,要求对象所属的类实现Comparable接口。                       
                                B:比较器排序(集合具备比较性)
                                        TreeSet的带参构造,要求构造方法接收一个实现了Comparator接口的对象。
                唯一:根据返回值是否为0。
               
                注意:
                        如果同时有两种方案,以谁为主呢?以比较器为主。
        (3)案例:(理解)
                TreeSet存储字符串并遍历
                TreeSet存储Integer并遍历
                TreeSet存储自定义对象并遍历
5:增强for循环(掌握)
        (1)格式:
                for(数组或者Collection集合的元素类型 变量 : 数组或者Collection集合的对象)
                {
                        直接使用变量即可。
                }
        (2)好处:
                方便了数组和Collection集合的遍历。
        (3)注意(注意):
                A:增强for是用来替代迭代器的。
                B:不要在用增强for遍历集合的时候,用集合对集合本身进行修改。
(4)遍历集合三种方式
                迭代器(Iterator)List接口还有一个特有的迭代器(ListIterator)
                普通for+get
                增强for(工作时候用)

6 个回复

倒序浏览
挺详细的,用心了,赞一个
回复 使用道具 举报
挺详细的,用心了,赞一个
回复 使用道具 举报
学习了!!
回复 使用道具 举报
:victory::victory:
回复 使用道具 举报
x564573138 来自手机 中级黑马 2015-7-12 15:41:33
地板
谢谢分享!!!
回复 使用道具 举报
感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马