您的位置:首页 > 职场人生

黑马程序员------第10天笔记(集合框架)

2014-04-21 19:06 260 查看
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
                                                                    

集合类

1,为什么出现集合类

 

面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。

 

2,数组和集合类同时容器有什么不同

 

数组虽然也可以存储对象,但长度一定,集合长度是可变的

数组可以存储基本数据类型,而集合只能存储对象。

 

3,集合类的特点

 

集合只用于存储对象,且长度可变

 

4,集合的分类

 

为什么出现这么多的容器呢?

因为每一个容器对数据的存储方式都有不同。

这个存储方式我们称之为:数据结构

 

5,Collection

|--List(有序)

|-- ArrayList

|--LinkedList

 

①    增

boolean add(E e)

参数类型是:Object,以便于接受任意类型的对象

boolean addAll(Collection)

集合中存储的都是对象的引用(地址)

②    删

void  clear()//清空

boolean  remove(Object o)

boolean  removeAll(Collection  o)移除指定集合中的元素

 

③    改

 

booleanretainAll(Collection c)                       保留交集

booleanremoveAll(Collection c)             去掉交集

 

④    查

int  size( )

boolean   isEmpty()

 

⑤    转换

toArray()

 

⑥    遍历

iterator()à取出并打印元素。sop(al)//仅仅打印数组

 

 

例:

Iterator it=al.iterator();

while(it.hasNext())

{

sop(it.next());

}

 

什么是迭代器?

其实就是集合的取出元素的方式。

如何最方便à在集合内部访问最方便à就把取出方式定义在集合的内部,这样取出方式就可以直接访问集合内容的元素

那么取出方式就被定义成了内部类

 

而每一个容器的数据结构不同,

所以取出动作细节也不一样。但是都有共性内容判断和去除那么加些共性抽取,所以就有了

 

                     通过一个对外提供的方法iterator()

                     比喻取出布娃娃的夹子就是迭代器

 

集合中存放的都是地址

6,List和Set

Collection

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

          |--ArrayList

          |--LinkedList

          |--Vector

   |--Set:元素是无序的,元素不可以重复

 

1,List

List家的三个小弟

 

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

 

            |--ArrayList :底层数据结构使用的是数组数据结构

特点:查询速度很快(一片连续的存储空间),但是增删稍慢,非同步的

                                       

            |--LinkedList:底层数据结构使用的是链表数据结构

特点:查询速度很快(不连续的存储空间),查询慢,增删快。

 

|--Vector:底层是数组数据结构和ArrayList有相同的结构。(元老级干部)是同步的-à过时了,以后不用了

 

枚举就是Vector特有的取出方式。

发现枚举和迭代器很像。其实枚举和迭代是一样的,因为枚举的名称以及方法的名称都很长所以枚举就抑郁而终。

 

1,ArrayList

①   凡是带角标的方法都是特有的方法

增:add(int index,E element)

      addAll(index,Collection)

删:remove(index)

改:set(int index,E element)

查:get(index)

subList(int start,int end)

 

listIterator( )à列表迭代器

                  

Iterator it=al.iterator();

                   while(it.hasNext())

                   {

                            if(it.next().equals("java02"))

                            {

                                     it.remove();

                                     al.add("java08");//并发访问出错,集合,迭代器的方法不可兼得

                            }

                   }

 

                   ListIteratorit=al.listIterator();

 

                   while(it.hasNext())

                   {

                            if(it.next().equals("java02"))

                            {

                                     it.remove();

                                     it.add("java08");//并发访问出错

                            }

                   }

 

可以看出ListIterator比Iterator有更加强大的功能。

 

2,LinkedList

特有方法:

增: addFirst()àofferFirst()

       addLast()àofferLast()

      

      

删: removeFirst()àpollFirst()

       removeLast()àpollLast()

 

改:

 

查: getFirst()àpeekFirst()

getLast()àpeekLast()

 

 

 

List集合判断元素是否相同,依据元素的equals方法

2,Set

      

1,概论

      

set家有两个小弟

Set (是无序的,元素不可以重复à1,无序性,2,唯一性)

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

              |--TreeSet:底层数据结构是二叉树,线程是非同步的。

         set功能和Collection是一致的。

 

 

2,HashSetà底层数据结构是哈希表

 

①    怎么区分有序和无序:存入和取出的顺序不一定一致

②    HashSet如何保证唯一性的:

是通过元素的两个方法:hashCode()  equals()

 

如果元素的hashCode值相同,才会去判断equals是否为true

如果元素的hashCode值不同,才会调用equals方法。

③    意对于判断元素是否存在以及删除等操作都是依赖的方法是一样的。

      

 

3,TreeSetà底层数据结构是二叉树(B+树)à存入元素要具备比较性。

 

       可以对Set集合中的元素进行排序

①     默认按字母排序à具备比较性à实现Comparable接口

②    String 类中有compareTo()

③    Comparable接口à该接口强制让Student类显现比较性

public intcompareTo()

{

….

}

④    综上所述TreeSet方法保证元素唯一性等的方法时compareTo方法(记得要实现Comparable接口)

⑤    TreeSet排序的第一种方式:元素实现Comparable接口覆盖compareTo()方法这种方式也称为元素排序的默认顺序

⑥    TreeSet集合的第二种排序方式,当元素本省不具备比较性,或者具备的比较性不是所需要的,集合自身具备比较性

在集合初始化时就有了比较方式à参照集合的构造方式

TreeSet(Comparator  c)

⑦    如果元素和容器同时具备比较性,那么容器比较性优先(比较器优先)

⑧    以上可以推出什么à接口很重要啊,程序的扩展性

                                                                            
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 黑马程序员