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

© zjj5669436182 中级黑马   /  2017-12-13 21:40  /  1250 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

集合进阶版
作者:一衡
今日学习的集合框架、迭代器、for循环的加强方法(foreach)、数据结构、判断元素的值。主要是对基础班的扩展和延伸。多理解。
一、集合体系框架
1、集合概述
由于不同数据结构(数据的组织、存储方式),Java就为我们提供了不同集合,又由于不同的集合他们的功能相似,不断向上提取,共性抽取出来。
2、关系图解
接口——————————》Collection -----》(顶层父接口)
接口——————》 List----------------------Set(继承关系)
实现类:ArrayList<E> ←」                    ﹂→HashSet<E>(实现关系)
其中List的特点是:有序、有整数索引值、元素值可重复
其中Set的特点是:无序、无索引值、不可重复
3、Collection中常用的功能
boolean  addObject  o):向集合中添加元素
void  clear();清空所有元素的值
Boolean containsObject  o);判断是否包含某元素
Boolean isEmpty();判断集合是否为空
Boolean removeObject  o);是否删除某元素,返回boolean类型值
Int size();返回集合长度
Object[] o toArray[] 将集合转换成一个Object类的集合例如;
Collection<String>  c =  new ArrayList<String>();
Object[] obj = c.toArray();//主要用于遍历集合
4、迭代器(Iterator)(也可用于遍历集合)代码例子
Collection<String > c = new ArrayList<>();
ListIterator<String>  lit = c.listiterator();
while(lit.hasNext()){//判断是否还有元素
String s = (String)lit.next();
System.out.println(s)
}
注意: 当使用迭代器遍历集合的时候,使用了集合中的 增加/删除 方法,导致并发修改异常产生。
解决方法:
A:不使用迭代器遍历集合,就可以在遍历的时候使用集合的方法进行增加或删除
B:依然使用迭代器遍历,那么就需要使用Iterator的子接口ListIterator来实现向集合中添加。
5、泛型
A、  反应概述
由于集合可以存储任意类型的对象,当我们存储了不同类型的对象,就有可能在转换的时候出现类型转换异常,
  所以java为了解决这个问题,给我们提供了一种机制,叫做泛型
B、泛型的使用
当类上定义<>的时候就可以使用泛型,例如ArrayList类的定义:
  class  ArrayList<E>,那么我们在创建ArrayList对象的时候就可以指定<>E的类型
  ArrayList<String> al=new ArrayList<String>(),那么String就把E替换掉了
6、foreach(加强版for循环)
增强for循环是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。
格式:
for(元素的数据类型  变量 : Collection集合or数组){
}
它用于遍历Collection和数组。通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作。(底层为迭代器)
二、数据结构
常见的数据结构
1、数组:特点:查找快、增删慢
2、链表;特点:增删快、查找慢
3、&队列
栈:先进后出
队列:先进先出
三、List子体系特点
1List的特有功能
                  void add(int index, E element) :将元素添加到index索引位置上
                E get(int index) :根据index索引获取元素
                E remove(int index) :根据index索引删除元素
                E set(int index, E element):index索引位置的的元素设置为element
四、LinkedList特有功能
        LinkedList底层使用的是链表结构,因此增删快,查询相对ArrayList较慢
  void addFirst(E e) :向链表的头部添加元素
        void addLast(E e):向链表的尾部添加元素
        E getFirst():获取链头的元素,不删除元素
        E getLast():获取链尾的元素,不删除元素
        E removeFirst():返回链头的元素并删除链头的元素
        E removeLast():返回链尾的元素并删除链尾的元素
五、自定义变量注意事项
equals注意事项
如过比较(equals)两个自定义变量时候,或者判断是否包含(contains)时候,必须要进行equals方法的重写,如果不重写只会比较其中的地址值。

2 个回复

倒序浏览
哇,继续努力哦
回复 使用道具 举报
不错不错   加油   学习使你快乐
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马