1.简介:
上一小节讲到了ArrayList的持久化本地保存,但是有新的需求,就是我们在播放的时候再次点击标记,那么就会得到新的时间,那么这个时间和原来的时间是需要对比,并再次重新排序的。所以就用到了排序。
2.流程分析:
- 1.每次点击标记按钮都得到新的值,放入ArrayList。
- 2.录完后,如果点击删除,则清空ArrayList,保存则持久化SP保存ArrayList.(根据上一小节的“time1-x”)
- 3.播放界面,首先获取到保存过的ArrayList,如果有的话就显示标记图标、且点击可展开。
- 4.如果正在播放,那么点击标记按钮,就会把数据放入到ArrayList里,“重新排序(就是本章节讲的)+并立即刷新“数据。
- 5.点击其他的item歌曲,就关闭当前的item,并又长久保存一次。
3.详细的流程在我的项目里,这里只是大致罗列了关联的基础。
基础回顾1:java中对ArrayList进行排序
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
class Test {
public static void main(String[] args) {
List<Student> studentList = new ArrayList<Student>();
studentList.add(new Student("丁发", 21));
studentList.add(new Student("赵四", 22));
studentList.add(new Student("张三", 11));
studentList.add(new Student("刘分", 19));
//年龄排序
Collections.sort(studentList, new SortByAge());
//输出
for (Student student : studentList) {
System.out.println(student.getName() + " / " + student.getAge());
}
System.out.println("----------------选另一种方式-----------------");
//名字排序
Collections.sort(studentList, new SortByName());
//输出
for (Student student : studentList) {
System.out.println(student.getName() + " / " + student.getAge());
}
}
}
class SortByAge implements Comparator {
public int compare(Object o1, Object o2) {
Student s1 = (Student) o1;
Student s2 = (Student) o2;
if (s1.getAge() > s2.getAge()) //前大于后,返回正,否则返回0或-,那么是默认的升序,反之可改变<或return
return 1;
return 0;
}
}
class SortByName implements Comparator {
public int compare(Object o1, Object o2) {
Student s1 = (Student) o1;
Student s2 = (Student) o2;
return s1.getName().compareTo(s2.getName());//如果进一步,就是名字相同,对比行年龄
}
}
Collections.sort()的Comparable和Comparetor的区别。
用Collections.sort方法对list排序有两种方法:
1.第一种:list中的”对象实现“Comparable接口。
/**
* 根据order对User排序
*/
//对象直接实现了Comparable接口,并重写compareTo方法。
public class User implements Comparable<User>{
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age= age;
}
//重写compareTo方法决定要对比的内容。
public int compareTo(User arg0) {
//this和刚加入的对比。
return this.getAge().compareTo(arg0.getAge());
}
}
public class Test{
public static void main(String[] args) {
User one = new User();
one.setName("a");
one.setAge(1);
User two = new User();
two.setName("b");
two.setAge(2);
List<User> list = new ArrayList<User>();
//此处add 2再add 1
list.add(two );
list.add(one );
Collections.sort(list);
for(User u : list){
System.out.println(u.getName());
}
}
}
输出了a->b
2.第二种:”根据Collections.sort重载方法“来实现同前一个方法一样。
/**
* 根据Age对User排序
*/
public class User { //此处无需实现Comparable接口,改成在测试类中填写
private String name;
private Integer Age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age= age;
}
}
//主类中我们可以这样(HastSet——>List——>sort进行排序):
public class Test {
public static void main(String[] args) {
User u1 = new User();
u1.setName("a");
u1.setPrice(13);
User u2 = new User();
u2.setName("b");
u2.setPrice(6);
Set<User> Hset = new HashSet<User>();
Hset.add(u2);
Hset.add(u1);
List<User> list = new ArrayList<User>();
list.addAll(Hset);
//sort方法里传入一个Comaprator对象。
Collections.sort(list,new Comparator<User>(){
public int compare(User arg0, User arg1) {
return arg0.getAge().compareTo(arg1.getAge());
}
});
for(User u : list){
System.out.println(u.getName());
}
}