java集合框架
一、内容回顾
1、面向对象的特征是什么?
封装:
多态的好处:减少代码,适用于程序的扩展
2、实现多态的方式有哪些?有什么区别?
有两种:
方式1:方法重写—动态方式实现多态
Pet wangcai=new Dog();
wangcai.eat();
方式2:方法重载—静态方式实现多态
3、接口和抽象类有什么区别?
创建对象:都不能被new 抽象类有构造方法 接口没有
成员:接口
继承:
4、说一说final关键字的作用?
5、String类有哪些方法,作用分别是什么,说出10个以上
二、今日内容
接口分离原则:
开闭原则:对扩展开放 对修改关闭
1、作业讲解
2、java集合框架认知
3、ArrayList
4、HashSet
5、HashMap
为什么学习集合?
变量—》数组----》集合
1、集合时“动态”数组,长度可以改变
2、集合提供了更多样的存储结构(key-value)
2、java集合框架认知
java集合分4个体系:
1、Collection集合
2、Map集合
3、Queue队列
4、Collections 集合工具类
不同集合的特点不同:1010000000000000000000100111111111111
1、能否重复
2、是否有序
Collection集合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UjF01roj-1629379311232)(pics\image-20210816104013059.png)]
ArrayList:数组的存储结构 非线程安全 效率高
遍历时效率高,添加、删除元素效率低
Vector: 数组的存储结构 线程安全 效率低
LinkedList:双向链表存储结构 遍历时效率低,增加、删除元素效率高
每个元素除了存储值,还需存储上、下元素的地址
特点:遍历效率低,增加、删除元素效率高
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xtEldyEC-1629379311234)(pics\image-20210816134527474.png)]
深入学些:
1、源码解析
ArrayList底层是数组,会发生数组的复制
2、集合排序
Collections.sort(); //字符串、数值
如果存放的是对象
排序方式1:Collections.sort(list,排序规则)
排序规则: new Comparator(){}
package com.qf.pro2103.day16;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import com.qf.pro2103.util.ListUtil;
public class Demo6 {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Student> stus=new ArrayList<Student>();
Student s1=new Student("qf001","贾玉堃",25);
Student s2=new Student("qf002","张磊",18);
Student s3=new Student("qf003","哈淳鑫",20);
Student s4=new Student("qf004","胡锦辉",19);
stus.add(s1);
stus.add(s2);
stus.add(s3);
stus.add(s4);
//按年年龄升序排序
Comparator<Student> comparator=new Comparator<Student>(){
@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
//return o2.getAge()-o1.getAge();
return o1.getStuName().compareTo(o2.getStuName());
}
};
//排序
Collections.sort(stus,comparator);
//打印集合
ListUtil.printList(stus);
}
}
排序方式2:类去实现Comparable—compareTo
package com.qf.pro2103.day16;
public class Student implements Comparable<Student> {
public Student() {
super();
}
public Student(String stuNo, String stuName) {
super();
this.stuNo = stuNo;
this.stuName = stuName;
}
public Student(String stuNo, String stuName, int age) {
super();
this.stuNo = stuNo;
this.stuName = stuName;
this.age = age;
}
@Override
public String toString() {
return "Student [stuNo=" + stuNo + ", stuName=" + stuName + ", age=" + age + "]";
}
private String stuNo;
private String stuName;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getStuNo() {
return stuNo;
}
public void setStuNo(String stuNo) {
this.stuNo = stuNo;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
@Override
public int compareTo(Student o) {
// TODO Auto-generated method stub
//先按年龄排序
int n1=this.age-o.age;
//int n2=this.stuName.compareTo(o.stuName);
int n2=o.stuName.compareTo(this.stuName);
return n1==0?n2:n1;
}
}
package com.qf.pro2103.day16;
import java.util.ArrayList;
import java.util.Collections;
import com.qf.pro2103.util.ListUtil;
public class Demo7 {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Student> stus=new ArrayList<Student>();
Student s1=new Student("qf001","zzz",25);
Student s2=new Student("qf002","lll",20);
Student s3=new Student("qf003","hahaha",20);
Student s4=new Student("qf004","ccc",19);
stus.add(s1);
stus.add(s2);
stus.add(s3);
stus.add(s4);
Collections.sort(stus);
ListUtil.printList(stus);
}
}
Collectiions
结合操作的工具类,里面封装了操作集合的一些方法:
sort() 给集合排序
shuffle()随机打乱顺序
reverse()倒置
小结:
1、List接口存放数据的特点:有序 可重复
2、3个实现类的区别
3、常见操作方法:添加 插入 删除 遍历等
4、排序:两种排序范式
3、Set集合的应用
存放数据的特点:无序、唯一
总结:
1、Collection框架组成
2、List接口及其实现类
3、Set及实现类
4、重点:集合排序
重写hashCode及equals
5、作业题
6、租车系统
1、用面向对象思想设计程序
2、使用集合存放数据:
集合1:可出租车辆
集合2:已出租车辆集合
功能菜单:1、查看可出租车辆
2、查看已出租车辆
3、出租
3、Set集合的应用
存放数据的特点:无序、唯一
总结:
1、Collection框架组成
2、List接口及其实现类
3、Set及实现类
4、重点:集合排序
重写hashCode及equals
5、作业题
6、租车系统
1、用面向对象思想设计程序
2、使用集合存放数据:
集合1:可出租车辆
集合2:已出租车辆集合
功能菜单:1、查看可出租车辆
2、查看已出租车辆
3、出租
4、还车