一、想对你说
(1)之前一直有小伙伴让我总结下Java相关的知识点,这里我针对有一定Java基础的同学做了一个系列的总结,感兴趣的同学可以看看顶部的【Java专栏】希望对大家有所帮助。
(2)要是对您有所帮助的话,可以给 “大大大钢琴” 点个赞,这是我继续下去的动力,谢谢大家了!废话不多说了,直接上干货。
二、List类排序方式
(一)List类介绍
List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下 >标)来访问List中的元素,这类似于Java的数组。
总结
(1)所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ]
(2)所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ]
(3)所有的List中可以有null元素,例如[ tom,null,1 ]
(4)基于Array的List(Vector,ArrayList)适合查询,而LinkedList 适合添加,删除操作
以下是list方法的使用、以及调用的方法定义
import java.util.*;
public class test_demo {
public static void main(String[] args) throws Exception {
System.out.println("开始:");
String a = "A", b = "B", c = "C", d = "D", repeat = "Repeat";
List<String> list = new ArrayList<String>();
list.add(a); // 索引位置为 0
list.add(repeat); // 索引位置为 1
list.add(b); // 索引位置为 2
list.add(repeat); // 索引位置为 3
list.add(c); // 索引位置为 4
list.add(repeat); // 索引位置为 5
list.add(d); // 索引位置为 6
System.out.println(list.indexOf(repeat));//开始第一个"Repeat"索引
System.out.println(list.lastIndexOf(repeat));//结尾第一个"Repeat"索引
System.out.println(list.indexOf(b));//开始第一个"b"索引
System.out.println(list.lastIndexOf(b));//结尾第一个"b"索引
System.out.println("结束!");
}
void testFunction(){
List list = new ArrayList();
list.add("test01");// 向列表的尾部追加指定的元素
list.add(1, "test01");// 在列表的指定位置插入指定元素
list.addAll(new ArrayList());// 追加指定 collection 中的所有元素到此列表的结尾
list.clear(); // 从列表中移除所有元素
list.contains("test");// 如果列表包含指定的元素,则返回true
list.containsAll(new ArrayList()); // 如果列表包含指定 collection 的所有元素,则返回 true
list.equals(new ArrayList());// 比较指定的对象与列表是否相等
list.get(0); // 返回列表中指定位置的元素
list.hashCode(); // 返回列表的哈希码值
list.indexOf("lwc"); // 返回列表中首次出现指定元素的索引,如果列表不包含此元素,则返回 -1
list.lastIndexOf("lwc"); // 返回列表中最后出现指定元素的索引,如果列表不包含此元素,则返回 -1
list.isEmpty(); // 如果列表不包含元素,则返回 true
list.remove(0); // 移除列表中指定位置的元素
list.remove("lwc"); // 移除列表中出现的首个指定元素
list.removeAll(new ArrayList()); // 从列表中移除指定 collection 中包含的所有元素
list.set(0, "lp"); // 用指定元素替换列表中指定位置的元素
list.size(); // 返回列表中的元素数
list.subList(1, 2); // 返回列表中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图
list.toArray(); // 返回以正确顺序包含列表中的所有元素的数组
list.toArray(new String[] { "a", "b" }); // 返回以正确顺序包含列表中所有元素的数组
}
}
(二)List 声明(6种)
Java 中初始化 List 的五种方法
(1)构造 List 后使用 List.add 初始化
(2)使用 {{}} 双括号语法
(3)使用 Arrays.asList
(4)使用 Stream (JDK8)
(5)使用 Lists (JDK9)
(6)使用guava包的Lists(推荐使用)
import org.testng.collections.Lists;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class test_demo {
public static void main(String[] args) {
//Java 中初始化 List 的五种方法
//(1)构造 List 后使用 List.add 初始化
//(2)使用 {{}} 双括号语法
//(3)使用 Arrays.asList
//(4)使用 Stream (JDK8)
//(5)使用 Lists (JDK9)
//(6)使用guava包的Lists(推荐使用)
//1、构造 List 后使用 List.add 初始化
List<String> stringList1 = new LinkedList<>();
stringList1.add("a");
stringList1.add("b");
System.out.println("方法1:" + stringList1);
//2、使用 {{}} 双括号语法
List<String> stringList2 = new LinkedList<String>(){{
add("a");
add("b");
}};
System.out.println("方法2:" + stringList2);
//3、使用 Arrays.asList
List<String> stringList3 = Arrays.asList("a", "b", "c");
System.out.println("方法3:" + stringList3);
//分步骤(先建数组,再存入list)
int[] intArray = new int[]{1, 2, 3};
Integer[] integerArray = new Integer[]{1, 2, 3};
List<int[] > intArrayList = Arrays.asList(intArray);
List<Integer> integerList = Arrays.asList(integerArray);
List<Integer> integerList2 = Arrays.asList(1, 2, 3);
//4、使用 Stream (JDK8)
List<String> stringList4 = Stream.of("a", "b","c").collect(Collectors.toList());
System.out.println("方法4:" + stringList4);
//5、使用 Lists (JDK9)
List<String> stringList5 = Lists.newArrayList("a", "b", "c");
System.out.println("方法5:" + stringList5);
//6、使用 guava包的Lists
//使用方法同上,提出这种方法主要是很多项目还是java8,没法直接用java9的List。
List<Integer> stringList6 = Lists.newArrayList(1, 2, 3);
System.out.println("方法6:" + stringList6);
}
}
(三)List 排序(2种)
利用Collections类的 java.util.Collections.sort(java.util.List, java.util.Comparator) 方法,自定义比较器对象对指定对象进行排序
Student类:对学生对象按照其 分数(降序)进行排序,当分数相同时按学号(从小到大)排序,代码如下:
3.1:Collections类的sort() 方法
参数不同: 1 . void sort(List list),按自然排序的升序排序
2. void sort(List list, Comparator c);定制排序,由Comparator控制排序逻辑
import java.util.*;
public class test_demo {
public static void main(String[] args) {
//方法1:是int的时候用
List list2 = new ArrayList();
list2.add(4);
list2.add(2);
list2.add(3);
Collections.sort(list2);
System.out.println(list2);
//方法2:自定义排序方式
test();
}
public static void test(){
List list = new ArrayList();
for (int i = 0; i <=4; i++) {
Student s1 = new Student();
s1.setId(10+i);
s1.setName("大钢琴"+i);
s1.setScore(50.5f+3*i);
list.add(s1);
}
Collections.shuffle(list);//打乱顺序
System.out.println("排序之前-----------------------");
for(Object stu:list){
Student stu1=(Student)stu;
System.out.println("id="+stu1.getId()+" name="+stu1.getName()+" score="+stu1.getScore());
}
//【重点】
list.sort(new Comparator<Student>(){
public int compare(Student s1,Student s2){
if(s1.getScore()>s2.getScore()){ //greater
return -1;
}else if(s1.getScore()==s2.getScore()){ //equals
if(s1.getId()>s2.getId()){
return 1;
}else if(s1.getId()==s2.getId()){
return 0;
}else{
return -1;
}
}else{ //less
return 1;
}
}
});
System.out.println("排序之后-----------------------");
for(Object stu:list){
Student stu1=(Student)stu;
System.out.println("id="+stu1.getId()+" name="+stu1.getName()+" score="+stu1.getScore());
}
}
static class Student{
private int id;
private String name;
private float score; //成绩
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
}
}
、
3.2:Comparable接口实现list的排序
假如现在我们有一个Person类的list集合,要让其按照一个Order属性进行排序,我们可以让Person类实现Comparable接口,重写其CompareTo方法即可,可以让程序按照我们想要的排列方式进行排序.
如:这里我让Person按照order属性升序排序,具体实现如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class test_demo {
public static void main(String[] args) {
//初始化数据
List listA = new ArrayList();
for (int i = 0; i <= 4; i++) {
Person p1 = new Person();
p1.setName("name1"+i);
p1.setOrder(1+i*3);
listA.add(p1);
}
Collections.shuffle(listA);//打乱顺序
Collections.sort(listA); //排序
//打印排序后的Person
for (Object p : listA) {
Person per = (Person) p;
System.out.println(per.getName() + ": "+ per.getOrder());
}
}
public static class Person implements Comparable {
private String name;
private int order;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
@Override
public int compareTo(Object arg0) {
Person per = (Person) arg0;
return this.getOrder().compareTo(per.getOrder()); //这里定义你排序的规则。
}
}
}