黑马程序员技术交流社区

标题: 【石家庄校区】集合 [打印本页]

作者: heimafima    时间: 2017-12-9 17:15
标题: 【石家庄校区】集合
本帖最后由 小石姐姐 于 2017-12-11 16:38 编辑

                                            接口
                                                                           Collection
                                 _____________|___________
                                                继承         |                                                   |         继承
                                 |                        |
                               list                                                 set                 
                          ______|______            _______|_______
                                                  |            |           |              |   
                                        实现  |            | 实现  实现|              |实现
                      ArrayList       LinKedList   HashSet     LinKedHashSet
                          类              类           类            类
rrayList
集合的体系结构:
         由于不同的数据结构(数据的组织,存储方式),所以Java为我们提供了不同的集合
                 但是不同的集合他们的功能都是相似的,不断的向上提取,将共性抽取出来,这就是集合体系形成的愿因
体系结构:
         怎么学习?最顶层开始学习,因为最顶层包含了所有的共性
                 怎么使用?使用最底层,因为最底层就是具体的实现
Collection
   Collection c=new Collection;//Collection是接口,不能实例化
   Collection c=new ArrayList;//多态,父类引用指向子类对象  
     boolean add(E e)//添加
         void clear()//清空
         boolean contains(Object o)//判断集合中是否包含指定元素
         boolean isEmpty()//是否为空
         boolean remove(Object o)//删除元素
         int size()//返回集合中的元素个数
         Objeak[]toArray()//将集合转换成一个Object类型的数组
集合的遍历方式:
     1.toArray(),可以把集合转换成数组,然后遍历数组即可
         2。iterator()可以返回一个迭代器对象,我们可以通过迭代器对象来迭代集合
Itertor:可以用于遍历集合
E next():返回下一个元素
boolean hasNext():判断是否有元素可以获取
注意:Exception in thread "main"java.util.NoSuchElementException
       使用next方式获取下一个元素,如果没有元素可以获取,则出现NoSuchElemenException
由于集合可以存储任意类型的对象,我们存储了不同类型放入对象,就有可能在转换的时候出现类型转换异常,
所以Java为了解决这个问题,给我们提供了一种机制,叫做泛型
泛型:是一种广泛的类型,把明确数据类型的工作提前到了编译时期,借鉴了数组的特点
泛型好处:
        可以避免了类型转换的问题
                可以减少黄色警告线
                可以简化我们代码的书写
什么时候可以使用泛型?
       当我们看到<E>,就可以使用泛型了
foreach:增强for循环,一般用于遍历集合或数组
格式:
    for(元素的类型变量:集合或者数组对象){
                可以直接使用变量:
        }
注意:在增强for循环中不能修改集合,否则会出现并发修改异常。

链表:由链子链接起来的一堆节点
节点:地址值,值,下一个结点地址值
链表特点:查询慢,增删快
List:
     有序的(存储和读取的顺序是一致的)
         有整数索引
         允许重复使用
List的特有功能
增 void add(int index,E element)在指定索引位置添加指定元素
删 remove(int index)删除指定元素并返回
改 E set(int index,E element)将指定索引位置的元素替换为指定元素,并将原头的元素返回
查 get(int index) 根据索引返回元素
List的常用子类:
     ArrayList
         底层是数据结构,查询快,增删慢
         LinkedList
         底层是结构是链表,查询慢,增删快
如何选择使用不同的集合?
   如果查询多,增删少,则使用ArrayList
   如果查询少,增删多,则使用LinkedList
   如果你不知道使用什么,则使用ArrayList
LinkedList的特有共能:
      void addFirst(E e)将元素添加到索引为0的位置
          void addLast(E e)将元素添加索引size()-1位置
          E getFirst()获取索引为0的元素
          E getLast()获取索引size()-1元素
          E removeFirst()删除索引为0的元素并返回
          E removeLast()删除索引为size()-1的元素并返回
作者: 小石姐姐    时间: 2017-12-11 16:38





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2