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. 用户操作的功能类 ,组装学生对象 , 修改学生对象, 查找学生对象 ,查找所有学生对象 ,删除学生对象
阅读全文
0 0
- java SE day14 火推
- java se day12 火推
- java SE Day13 火推
- java SE day15火推
- java SE day16 火推
- java SE 18 火推
- java SE 17 火推 IO流
- java学习day14
- JAVA - day14 -1
- java学习day14
- day14/ArrayListTest2.java
- day14/ArrayListTest.java
- day14/CollectionDemo.java
- day14/HashSetDemo.java
- day14/HashSetTest.java
- day14/LinkedListDemo.java
- day14/LinkedListTest.java
- day14/ListDemo.java
- 前端面试题-长沙
- C++中String类的实现
- GIT命令符收集
- Event多线程同步演示
- 文件与文件夹
- java SE day14 火推
- lesson5-2
- C、C++中字符串和字符指针之间的转换
- kudu和kudu-impala的安装流程
- 监听tab键 是光标只在两个input中切换 监听回车键
- quartz2.2.3 spring整合遇到的错误,及quartz配置文件说明
- 最简实例说明wait、notify、notifyAll的使用
- 每天一个linux命令(7):mv命令
- 小米等部分手机机型不弹出对话框问题