day15_总结
作者:互联网
一 回顾
1.throw与 throws
throws 声明一个异常 throw 抛出异常
2.自定义异常
A.定义一个类 继承Execption
B.调用父类构造方法
3.在继承中异常: 子类重写的方法的异常声明 不能 超出父类的范围(父类异常声明本身或者是其子类)
4.集合:
A.概念: 用于存储数据的容器
B.集合与数组比较
a.数组长度的固定的 集合的长度是可变的
b.数组既可以存储引用数据类型 也可以存储基本数据类型 集合只能存储引用数据类型
C.分类: 单列集合 与双列集合
D.单列集合的接口 Collection
boolean add(E e) 向集合的末尾添加数据
void clear() 清空集合
boolean contains(Object o) 判断集合中是否包含此元素
boolean isEmpty() 判断集合是否为空
Iterator<E> iterator()将集合转换为迭代器
boolean remove(Object o) 删除集合中元素
int size() 获取集合长度
Object[] toArray() 将集合转换为数组
F.List
特点:
有序 有索引 可以重复
实现类: ArrayList LinkedList
方法:
void add(int index,E element) 增加
E get(int index)查询
E set(int index,E element) 修改
E remove(int index) 删除
G.集合的遍历方式:
a.将集合转换为数组
b.使用迭代器遍历
c.使用增强for循环
d.使用普通for循环(List以及实现类)
五 List
5.1 List-ListIterator
方法名称 | 方法描述 |
---|---|
ListIterator |
将集合转换为迭代器 |
boolean hasPrevious() | 判断是否有上一个元素 |
E previous() | 返回列表中的前一个元素 |
void add(E e) | 将指定的元素插入列表 |
代码
package com.qf.test02;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Test01 {
public static void main(String[] args) {
//实例化集合
List li = new ArrayList();
li.add("贾玲");
li.add("沈腾");
li.add("宋小宝");
li.add("马丽");
//转换为迭代器
ListIterator iter = li.listIterator();
while (iter.hasNext()){
iter.next();
}
//使用循环来遍历
while (iter.hasPrevious()) {
Object obj = iter.previous();
System.out.println(obj);
}
}
}
5.2 并发异常-ConcurrentModificationException
问题: 使用迭代器遍历 使用集合的方法添加数据 集合修改数据之后 迭代器并不知道集合修改了数据
所有就会产生并发异常
解决:
A.使用迭代器遍历 使用迭代器添加数据
B.使用集合传统的方式遍历 使用集合来添加数据
代码-问题
package com.qf.test02;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Test02 {
public static void main(String[] args) {
//实例化集合
List li = new ArrayList();
//向集合中添加元素
li.add("宋小宝");
li.add("王胜龙");
li.add("贾玲");
li.add("阿飞");
//将集合转换我迭代器
Iterator iter = li.iterator();
while (iter.hasNext()) {
String s = (String) iter.next();
if (s.equals("王胜龙")) {
li.add("小沈阳");
}
}
System.out.println(li);
}
}
解决-01
package com.qf.test02;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Test03 {
public static void main(String[] args) {
//实例化集合
List li = new ArrayList();
//向集合中添加元素
li.add("宋小宝");
li.add("王胜龙");
li.add("贾玲");
li.add("阿飞");
//将集合转换为迭代器
ListIterator iter = li.listIterator();
//使用循环遍历
while (iter.hasNext()) {
String s = (String) iter.next();
if (s.equals("王胜龙")){
iter.add("小沈阳");
}
}
System.out.println(li);
}
}
解决-02
package com.qf.test02;
import java.util.ArrayList;
import java.util.List;
public class Test04 {
public static void main(String[] args) {
//实例化集合
List li = new ArrayList();
//向集合中添加元素
li.add("宋小宝");
li.add("王胜龙");
li.add("贾玲");
li.add("阿飞");
//使用普通for循环
for (int i=0;i<li.size();i++) {
String s = (String) li.get(i);
if (s.equals("王胜龙")) {
li.add("小沈阳");
}
}
System.out.println(li);
}
}
六 ArrayList
6.1 简介
1.ArrayList是List接口的实现类
2.特点:
A.ArrayList底层是以数组的数据结构 数组的初始化容量是10
以数组数据结构存储特点: 查询快 增删慢
B.此实现不是同步的 在多线程中是不安全
6.2 数据结构-数组结构
6.3 数据结构-栈结构
6.4 数据结构-队列
6.5 案例
step01 需求
step02 分析
A.创建一个工人类 属性: 名称 年龄 工资
B.实例化多个工人对象存入到集合
C.对集合进行操作
step03 代码-工人类
package com.qf.test03;
public class Worker {
private String name;
private int age;
private double sal;
public Worker() {
}
public Worker(String name, int age, double sal) {
this.name = name;
this.age = age;
this.sal = sal;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSal() {
return sal;
}
public void setSal(double sal) {
this.sal = sal;
}
@Override
public String toString() {
return "Worker{" +
"name='" + name + '\'' +
", age=" + age +
", sal=" + sal +
'}';
}
}
step04-测试类
package com.qf.test03;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class Test01 {
public static void main(String[] args) {
//实例化集合
List list = new ArrayList();
//向集合中添加元素
list.add(new Worker("胡大汉",18,10000));
list.add(new Worker("小胡",20,12000));
list.add(new Worker("阿飞",20,14000));
list.add(new Worker("王胜龙",24,10000));
list.add(new Worker("阿超",22,16000));
list.add(new Worker("胡歌",40,18000));
list.add(new Worker("小胡子",20,18000));
//使用增强for循环打印工人的信息
for (Object obj :list) {
Worker w = (Worker) obj;
System.out.println(w);
}
//使用循环获取每一个工人的工资
double sum=0;
Iterator iter = list.iterator();
while (iter.hasNext()) {
Worker w = (Worker) iter.next();
sum+=w.getSal();
}
System.out.println((int)(sum/list.size()));
//使用普通for循环
for (int i=0;i<list.size();i++) {
Worker w = (Worker) list.get(i);
if (w.getName().contains("胡")){
System.out.println(w);
}
}
System.out.println("=======================");
//使用循环遍历
for (int i=0;i<list.size();i++) {
//获取集合中对象
Worker w = (Worker) list.get(i);
if (w.getName().substring(0,1).equals("胡")){
System.out.println(w);
}
}
//实例化Scanner
Scanner input = new Scanner(System.in);
System.out.println("请输入姓名");
String name = input.next();
//定义一个标记记录状态
boolean flag = false;
//使用循环遍历集合 从集合中查找
for (Object obj : list){
Worker w = (Worker) obj;
if (w.getName().equals(name)){
System.out.println(w);
flag = true;
break;
}
}
if (!flag){
System.out.println("查无此人");
}
System.out.println("请输入工资");
double num = input.nextDouble();
//使用循环遍历
for (Object obj:list) {
Worker w= (Worker) obj;
if (w.getSal() > num) {
System.out.println(w);
}
}
}
}
七 LinkedList
7.1 简介
1.LinkedList 也是List 接口的实现类
2.LinkedList是以链表的方式进行存储 数据结构-链表
3.特点:
A.查询慢 增删快
B.此实现不是同步的 在多线程中也是不安全的
7.2 独有的方法
方法的名称 | 方法的描述 |
---|---|
public void addFirst(E e) | 将指定元素插入此列表的开头 |
public void addLast(E e) | 将指定元素添加到此列表的结尾 |
public E getFirst() | 返回此列表的第一个元素 |
public E getLast() | 返回此列表的最后一个元素 |
public E removeFirst() | 移除并返回此列表的第一个元素。 |
public E removeLast() | 移除并返回此列表的最后一个元素。 |
代码
package com.qf.test04;
import java.util.LinkedList;
import java.util.List;
public class Test01 {
public static void main(String[] args) {
//实例化集合
LinkedList li = new LinkedList();
//添加一个数据
li.add("迪丽热巴");
li.add("古力娜扎");
System.out.println(li);
//向集合头部增加元素
li.addFirst("杨颖");
li.addLast("杨幂");
System.out.println(li);
//获取集合头部与尾部的元素
System.out.println(li.getFirst());
System.out.println(li.getLast());
//删除头部为尾部的元素
li.removeFirst();
System.out.println(li);
li.removeLast();
System.out.println(li);
}
}
7.3 数据结构-链表
7.4 案例
step01 验证ArrayList与LinkedList的效率(查询以及增加删除)
step02 分析
A.定义一个方法
B.根据毫秒值来判断其执行的效率
step03 代码
package com.qf.test05;
import java.util.ArrayList;
import java.util.LinkedList;
public class Test01 {
public static void main(String[] args) {
// addArrayList();
// addLinkedList();
selectArrayList();
selectLinkedList();
}
public static void addArrayList(){
//实例化集合
ArrayList list = new ArrayList();
//获取开始的毫秒值
long startTime =System.currentTimeMillis();
for (int i=0;i<100000000;i++) {
list.add(i);
}
//获取结束的毫秒值
long endTime =System.currentTimeMillis();
System.out.println(endTime-startTime);
}
public static void addLinkedList(){
//实例化LinekdList
LinkedList list = new LinkedList();
long startTime =System.currentTimeMillis();
for (int i=0;i<100000000;i++) {
list.add(i);
}
//获取结束的毫秒值
long endTime =System.currentTimeMillis();
System.out.println(endTime-startTime);
}
public static void selectArrayList(){
ArrayList list = new ArrayList();
for (int i=0;i<10000000;i++) {
list.add(i);
}
long startTime =System.currentTimeMillis();
for (int i=0;i<list.size();i++) {
list.get(i);
}
long endTime =System.currentTimeMillis();
System.out.println(endTime-startTime);
}
public static void selectLinkedList(){
LinkedList list = new LinkedList();
for (int i=0;i<10000000;i++) {
list.add(i);
}
long startTime =System.currentTimeMillis();
for (int i=0;i<list.size();i++) {
list.get(i);
}
long endTime =System.currentTimeMillis();
System.out.println(endTime-startTime);
}
}
八 Set
8.1 简介
1.Set集合是一个接口 实现类 HashSet TreeSet
2.特点:
A.不能重复
B.无序 没有索引 (存与取的顺序不一致)
代码
package com.qf.test06;
import java.util.HashSet;
import java.util.Set;
public class Test01 {
public static void main(String[] args) {
//实例化集合
Set s = new HashSet();
//向集合中添加元素
s.add("张三");
s.add("迪丽热巴");
s.add("李四");
s.add("古力娜扎");
s.add("阿飞");
s.add("迪丽热巴");
System.out.println(s);
}
}
8.2 set集合的遍历方式
8.2.1 使用迭代器
package com.qf.test06;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Test02 {
public static void main(String[] args) {
//实例集合
Set s = new HashSet();
s.add("迪丽热巴");
s.add("古力娜扎");
s.add("渣渣辉");
s.add("古天乐");
//将集合转换为迭代器
Iterator iter = s.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
}
}
8.2.2 使用增强for循环
package com.qf.test06;
import java.util.HashSet;
import java.util.Set;
public class Test03 {
public static void main(String[] args) {
Set s= new HashSet();
s.add("迪丽热巴");
s.add("古力娜扎");
s.add("渣渣辉");
s.add("古天乐");
for (Object obj :s){
System.out.println(obj);
}
}
}
8.3 案例
step01 需求
step02 分析
A.产生一个20- 40 Math.random()*21+20
B.使用set集合来存储
C.使用while循环
循环判断 条件:集合长度 <10
step03 代码
package com.qf.test06;
import java.util.HashSet;
import java.util.Set;
public class Test04 {
public static void main(String[] args) {
//实例化集合
Set s = new HashSet();
//使用循环给集合添加数据
while (s.size() <10) {
//产生随机数
int random = (int) (Math.random()*21+20);
s.add(random);
}
System.out.println(s);
}
}
标签:总结,li,util,day15,add,集合,import,public 来源: https://www.cnblogs.com/zhenglyz/p/16533459.html