前几天做数据结构题碰到了集合,当时并没有学,只是通过做题对此稍微有了了解。今天正好学到了,来做一下学习记录。
一.集合总体框架
由上图可知,集合的实现方式有两大类:
(1)线性接口:该集合的顶层接口是java.util.Collection,所有集合中的数据都是将自身存储到集合中。
该接口下有两个子接口:
java.util.List 有序,可重复
java.util.Set 无序,不可重复
(2)键值映射:该集合的顶层接口是java.util.Map,所有集合中的数据都是以键值映射的方式存储到集合中,即都必须创建一个关键字key,对应一个值value,其中key是唯一的。
我们常用的三个接口是List,Set,Map。
二.集合的功能
集合和数组一样,都是用来存储相同类型数据的容器。
现在我们使用集合时都会和泛型一起使用,使用泛型来约束集合中可以保存的数据类型。
三.常用实现类
我们常用的实现类有:
ArrayList——有序可重复,线性集合中使用最多的一个类,就是一个可变长度的数组。查找易,增删难
LinkedList——有序可重复,链表方式实现的线性集合,增删改易,查找难;
HashSet——散列集合,无序不重复。Set接口中的常用类;
HashMap——Hash算法的键值映射集合,按键找值;
TreeSet——有序不重复,是个有序的Set接口的实现类,经过了排序;
TreeMap——有序的Map接口的实现类。
四.集合的排序
集合的排序指的是List集合的排序,因为Set是无序的,不需要排序。
4.1String类型的集合排序
针对List集合进行排序的方法是Collections.sort()。
是Collections类里的一个静态方法。
我们看String类可见,它实现了Comparable接口,所以具有比较的能力。
案例:
package com.xja.test3; import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; /** * @描述: * @author: * @date:2023/2/2119:13 * @version: **/ public class T1 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("hij"); list.add("abc"); list.add("def"); //未排序前,默认添加顺序排序 System.out.println(list); //排序 Collections.sort(list); //排序后 System.out.println(list); } }
输出结果:
4.2比较器接口
比较器接口,代表一种可以进行比较的能力,任何类实现了比较器接口,并重写相应的方法,就表示这个类具备了比较大小的能力。
Java中提供了两个比较器接口:
(1)Comparable接口(内置比较器接口) 自然排序
一般写在实体类里,使得该类的某个属性可以进行比较。从而对该实体类的对象进行排序。如:学生在学校默认都是按学号进行排序。
(2)Comparator接口(外置比较器接口) 扩展排序
当我们使用别人编写好的一个类,该类中的比较器不符合我们的要求 ,就可以使用外置比较器。实现Comparator接口,重写comparaTo()方法即可。
如:学校运动会,按跑步成绩进行排序;一次摸底考试,按考试成绩排序,那么之前的按学号排序就不符合我们的需求,这时候就用到了外置比较器。
4.2.1内置比较器接口使用案例
package com.xja.test3; /** * @描述:学生类(实体类) * @author: * @date:2023/2/2121:06 * @version: **/ public class Stu implements Comparable<Stu>{ private Integer sid; private String sname; private Double sscore; @Override public int compareTo(Stu o) { return this.sname.length()-o.sname.length(); } public Stu() { } public Stu(Integer sid, String sname, Double sscore) { this.sid = sid; this.sname = sname; this.sscore = sscore; } public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public Double getSscore() { return sscore; } public void setSscore(Double sscore) { this.sscore = sscore; } @Override public String toString() { return "Stu{" + "sid=" + sid + ", sname='" + sname + '\'' + ", sscore=" + sscore + '}'; } }
package com.xja.test3; import java.util.ArrayList; import java.util.Collections; /** * @描述:内置比较器测试类 * @author: * @date:2023/2/2121:13 * @version: **/ public class StuTest1 { public static void main(String[] args) { ArrayList<Stu> list = new ArrayList<>(); list.add(new Stu(2,"aa",90D)); list.add(new Stu(1,"cccc",89D)); list.add(new Stu(4,"b",78D)); list.add(new Stu(3,"eee",99D)); //排序前 System.out.println(list); //排序后 Collections.sort(list); System.out.println(list); } }
输出结果:
[Stu{sid=2, sname='aa', sscore=90.0}, Stu{sid=1, sname='cccc', sscore=89.0}, Stu{sid=4, sname='b', sscore=78.0}, Stu{sid=3, sname='eee', sscore=99.0}] [Stu{sid=4, sname='b', sscore=78.0}, Stu{sid=2, sname='aa', sscore=90.0}, Stu{sid=3, sname='eee', sscore=99.0}, Stu{sid=1, sname='cccc', sscore=89.0}]
4.2.2外置比较器接口使用案例
package com.xja.test3; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; /** * @描述:内置比较器测试类 * @author: * @date:2023/2/2121:13 * @version: **/ public class StuTest1{ public static void main(String[] args) { ArrayList<Stu> list = new ArrayList<>(); list.add(new Stu(2,"aa",90D)); list.add(new Stu(1,"cccc",89D)); list.add(new Stu(4,"b",78D)); list.add(new Stu(3,"eee",99D)); //排序前 System.out.println(list); //内置比较器排序后 Collections.sort(list); System.out.println(list); //外置比较器使得按成绩排序 Collections.sort(list, new Comparator<Stu>() { @Override public int compare(Stu o1, Stu o2) { if (o1.getSscore()>o2.getSscore()){ return 1; }else { return -1; } } }); System.out.println(list); } }
输出结果:
[Stu{sid=2, sname='aa', sscore=90.0}, Stu{sid=1, sname='cccc', sscore=89.0}, Stu{sid=4, sname='b', sscore=78.0}, Stu{sid=3, sname='eee', sscore=99.0}] [Stu{sid=4, sname='b', sscore=78.0}, Stu{sid=2, sname='aa', sscore=90.0}, Stu{sid=3, sname='eee', sscore=99.0}, Stu{sid=1, sname='cccc', sscore=89.0}] [Stu{sid=4, sname='b', sscore=78.0}, Stu{sid=1, sname='cccc', sscore=89.0}, Stu{sid=2, sname='aa', sscore=90.0}, Stu{sid=3, sname='eee', sscore=99.0}]
标签:sname,list,sscore,Collection,Stu,sid,集合,public From: https://www.cnblogs.com/zhengfuweilai/p/17138759.html