集合框架
为什么学集合
变量-----》数组-----》集合
- 集合是动态数组,长度可变
- 集合提供了更多样的存储结构(key-value)
java框架的认知
Java集合框架分4个体系:
- Collection 集合
- Map 集合
- Queue 队列
- Collections 集合工具类
不同集合特点不同
- 能否重复
- 是否有序
collection集合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4cOMCEgX-1629105886408)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20210816102929196.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BXGvBKod-1629105886412)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20210816104008843.png)]
ArrayList: 数组的存储结构 非线程安全 效率高
Vector: 数组存储结构 线程安全 效率低
LinkedList: 双向链表存储结构 遍历时效率低 增加、删除时效率高。
每个元素除了存储值,还需存储上、下元素的地址
特点:遍历效率低 怎加、删除元素效率高
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hJH4m6Py-1629105886414)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20210816134611222.png)]
深入解析:
-
源码解析
ArrayList底层是数组,会发生数组的复制
-
集合排序
Collections.sort();//字符串、数值
如果存放的是对象
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、排序:两种排序范式
Set集合的应用
存放数据的特点:无序、唯一
总结:
1、Collection框架组成
2、List接口及其实现类
3、Set及实现类
4、重点:集合排序
重写hashCode及equals
1、List接口存放数据的特点:有序 可重复
2、3个实现类的区别
3、常见操作方法:添加 插入 删除 遍历等
4、排序:两种排序范式
Set集合的应用
存放数据的特点:无序、唯一
总结:
1、Collection框架组成
2、List接口及其实现类
3、Set及实现类
4、重点:集合排序
重写hashCode及equals