java SE day14 火推

来源:互联网 发布:php登录次数 编辑:程序博客网 时间:2024/05/16 11:44

集合

存储数据的容器 , 数组:     Object[] arr = new Object[10]; Object数组, 可以存储任意的类型!问题:  数组中的元素个数 是固定的 , 不能扩充大小! 在早期, 一般采用数组中存放链表结构来实现动态扩充 !   但是实现太复杂! --------------------------------------后期(jdk1.2)Java为了方便开发者 , 更快的实现各种数据结构的容器

Collection

Collection 是集合单值存储的最大父接口

Collection 与 Collections的区别

Collection是集合单值存储的最大父接口 , Collections是集合的工具 !  没有关系, 也不存在区别! 

ArrayList

默认的初始容量为10 !扩容算法为:  原长度加上原长度右移一位 (1.5倍) !允许存在null值, 允许重复的值!非线程安全的, 效率高 !存储的数据是有序的内部的实现是对象数组 ,便于遍历,查询操作 !jdk 1.2
常用方法:
对于单个数据的增删查:boolean add(E e) : 向集合中添加一个元素   *****E get(index): 获取指定索引下的元素    *****E remove(index) : 删除并获取指定索引下的元素 *****boolean remove(E e): 删除指定的元素 , 并根据结果返回成功(true)或失败(false) *****int size(): 获取当前集合的有效数据长度 *****    遍历操作:     for(int i=0;i<list.size();i++){        System.out.println(list.get(i));    }add(int index,E e):  向指定的位置, 添加一个元素set(int index,E e):  替换指定位置的元素 clear(): 清空集合 *

对于一组数据的增加删除boolean addAll(Collection c)*boolean addAll(int index, Collection c);    想当前的集合中 追加另外一个集合的所有元素boolean removeAll(Collection c):*  从当前集合中移除与指定集合中所匹配的所有元素 !retainAll(Collection c): 保留当前集合中与指定集合重复的所有元素 !

判断集合中是否包含某个元素 或 某个集合boolean contains(Object o):*** 判断某个元素是否在集合中存在boolean containsAll(Collection c): 判断当前集合是否包含某个集合内容

将List集合转换为数组Object[] toArray();T[] toArray(T[] t);

获取元素位于集合中的下标int indexOf(E e)**    从下标0 开始检索元素是否存在    元素存在则返回匹配的第一个下标 , 不存在则返回-1int lastIndexOf(E e)    从最大下标 开始向前检索元素是否存在    元素存在则返回匹配的第一个下标 , 不存在则返回-1

从集合中截取一部分 进行操作List subList(int startIndex,int endIndex):     截取操作, 包含startIndex, 不包含endIndex    从集合中取出一部分进行操作 , 返回的类型依然是List集合!    但是这个新集合其实是与原集合使用的同一块内存, 在操作时 ,如果更新子集合 ,会影响到原有的List特殊操作:     清除集合4-8下标的所有元素    data.subList(4, 8).clear();
面试题
关于remove的重载的面试题ArrayList list = new ArrayList();    list.add(1);    list.add(2);    list.add(3);    list.remove(1);System.out.println(list);问题是, 删除的是哪一个元素? 答案是按照下标删除了 , 1下标的数据2 ; 原因:  ArrayList默认存储的Object , 其实我们在向集合中存储数据时, 存储的1,2,3 并不是基本数据类型, 而是对应的包装类 !(属于自动装箱操作)我们在删除时, 传递了整型1 , 刚好存在一个remove方法, 需要整型, 就调用了方法:  remove(int index)

LinkedList

内部使用链表实现线程非安全的 , 效率较高方便删除  和 插入 
队列的应用

队列 Queue

boolean offer(E e) : 将一个元素, 添加到队列的尾部,  如果添加成功返回trueE poll(): 从队列首部取出一个数据 并从队列中移除 !E peek(): 从队列首部取出一个数据 !

双端队列 Deque

Queue的方法 在Deque中都可以使用 !    boolean offerLast(E e); 向队列的尾部, 追加一个元素    boolean offerFirst(E e);向队列的首部, 添加一个元素    E pollLast(): 从队列的尾部, 取出并移除一个元素    E pollFirst(): 从队列的首部, 取出并移除一个元素    E peekLast(): 从队列的尾部, 取出一个元素    E peekFirst(): 从队列的首部, 取出一个元素

Vector

是Java中最早提供动态对象数组存储的 操作类 !  在jdk1.0引入 !在jdk1.2时 , 将其整合到了Conllection 体系下 , 并对其方法进行了优化!使用的方式 与 ArrayList 基本一致 ! 内部扩充算法与ArrayList不同:     用户可以指定扩容的增量 ,如果不指定增量, 默认为扩容两倍! 

Set

存储的数据 是无序的 , 是不可重复的并且, 只允许存在一个null

Iterator 迭代器

使用迭代器  迭代集合 (LIST / SET)boolean hasNext(): 判断迭代的下一个元素 是否存在 , 存在则返回true *****E next(): 取出下一个元素 , 有可能出现错误NoSuchElementException , 表示下一个元素不存在 *****void remove(): 删除集合中的最后一个元素

经典迭代输出的代码: Iterator<E> it = set.iterator();while(it.hasNext()){    System.out.println(it.next());}

增强for循环 (foreach)

    for(数据类型 变量名:数组或集合名称) {    }遍历数组的案例:     int[] arr = {1,2,3,4,5,6,7};    for(int i:arr){        System.out.println(i);    }遍历集合的案例:     List<String> data = new ArrayList<String>();    data.add("张三");    data.add("李四");    data.add("董飞");    data.add("旭东");    for(String i:data){        System.out.println(i);    }

作业

通过集合, 完成学生管理系统的编写 !1.  用户的界面(打印欢迎语句,提示用户操作)2.  学生类, 和一个学生类的集合3.  用户操作的功能类 ,组装学生对象 , 修改学生对象, 查找学生对象 ,查找所有学生对象 ,删除学生对象
原创粉丝点击