java.util.List接口,继承自Collection。
List集合是可重复集,并且有序,提供了一套可以通过下标操作元素的方法。
常用实现类:
java.util.ArrayList:内部使用数组实现,查询性能更好。
java.util.linkedList:内部使用链表实现,首尾增删元素性能更好.
List集合常见方法
1、get()与set()
package com.test.list;
import java.util.ArrayList;
import java.util.List;
public class ListDemo {
public static void main(String[] args) {
List list = new ArrayList<>();
// List list = new linkedList<>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add("five");
//获取第三个元素
String e = list.get(2);
System.out.println(e);
for(int i=0;i
2、重载的add()和remove()
package com.test.list;
import java.util.ArrayList;
import java.util.List;
public class ListDemo2 {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add("five");
System.out.println(list);
//[one,two,six,three,four,five]
list.add(2,"six");
System.out.println(list);
//[one,six,three,four,five]
String e = list.remove(1);
System.out.println(list);
System.out.println("被删除的元素:"+e);
}
}
3、subList()方法
package com.test.list;
import java.util.ArrayList;
import java.util.List;
public class ListDemo3 {
public static void main(String[] args) {
List list = new ArrayList<>();
for(int i=0;i<10;i++){
list.add(i);
}
System.out.println(list);
//获取3-7这部分
List subList = list.subList(3,8);
System.out.println(subList);
//将子集每个元素扩大10倍
for(int i=0;i
集合与数组的转换
1、集合转换为数组
Collection提供了一个方法:toArray,可以将当前集合转换为一个数组
package com.test.list;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class CollectionToArrayDemo {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add("five");
System.out.println(list);
// Object[] array = list.toArray();
String[] array = list.toArray(new String[list.size()]);
System.out.println(array.length);
System.out.println(Arrays.toString(array));
}
}
2、数组转换为List集合
数组的工具类Arrays提供了一个静态方法asList(),可以将一个数组转换为一个List集合
package com.test.list;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayToListDemo {
public static void main(String[] args) {
String[] array = {"one","two","three","four","five"};
System.out.println(Arrays.toString(array));
List list = Arrays.asList(array);
System.out.println(list);
list.set(1,"six");
System.out.println(list);
//数组跟着改变了。注意:对数组转换的集合进行元素操作就是对原数组对应的操作
System.out.println(Arrays.toString(array));
// list.add("seven");
// List list2 = new ArrayList<>();
// list2.addAll(list);
List list2 = new ArrayList<>(list);
System.out.println("list2:"+list2);
list2.add("seven");
System.out.println("list2:"+list2);
}
}
3、集合的排序
java.util.Collections类
Collections是集合的工具类,里面定义了很多静态方法用于操作集合.
Collections.sort(List list)方法,可以对List集合进行自然排序(从小到大)
package collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class SortListDemo1 {
public static void main(String[] args) {
List list = new ArrayList<>();
Random random = new Random();
for(int i=0;i<10;i++){
list.add(random.nextInt(100));
}
System.out.println(list);
Collections.sort(list);
System.out.println(list);
}
}
4、排序自定义类型元素
package collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SortListDemo2 {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add(new Point(3,5));
list.add(new Point(7,9));
list.add(new Point(1,1));
list.add(new Point(8,3));
list.add(new Point(2,6));
System.out.println(list);
Collections.sort(list);//编译不通过 compare比较 comparable可以比较的
System.out.println(list);
}
}
实际开发中,我们并不会让我们自己定义的类(如果该类作为集合元素使用)去实现Comparable接口,因为这对我们的程序有侵入性。侵入性:当我们调用某个API功能时,其要求我们为其修改其他额外的代码,这个现象就是侵入性。侵入性越强的API越不利于程序的后期可维护性,应当尽量避免。
5、重载的Collections.sort(List list,Comparator c)方法
package collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortListDemo2 {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add(new Point(3,5));
list.add(new Point(7,9));
list.add(new Point(1,1));
list.add(new Point(8,3));
list.add(new Point(2,6));
System.out.println(list);
// Collections.sort(list);//编译不通过 compare比较 comparable可以比较的
Comparator c = new Comparator() {
public int compare(Point o1, Point o2) {
int olen1 = o1.getX()*o1.getX()+o1.getY()*o1.getY();
int olen2 = o2.getX()*o2.getX()+o2.getY()*o2.getY();
return olen1-olen2;
}
};
Collections.sort(list,c);
System.out.println(list);
}
}
最终没有侵入性的写法
package collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortListDemo2 {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add(new Point(3,5));
list.add(new Point(7,9));
list.add(new Point(1,1));
list.add(new Point(8,3));
list.add(new Point(2,6));
System.out.println(list);
// Collections.sort(list);//编译不通过 compare比较 comparable可以比较的
// Comparator c = new Comparator() {
//
// public int compare(Point o1, Point o2) {
// int olen1 = o1.getX()*o1.getX()+o1.getY()*o1.getY();
// int olen2 = o2.getX()*o2.getX()+o2.getY()*o2.getY();
// return olen1-olen2;
// }
// };
// Collections.sort(list,c);
Collections.sort(list,new Comparator() {
public int compare(Point o1, Point o2) {
int olen1 = o1.getX()*o1.getX()+o1.getY()*o1.getY();
int olen2 = o2.getX()*o2.getX()+o2.getY()*o2.getY();
return olen1-olen2;
}
});
System.out.println(list);
}
}
案例练习:
创建Student类,创建集合将Student对象加入集合,按学号对学生信息进行排序。
创建Student类
package com.scy.array;
public class Student{
//属性
public int id;
public String name;
public String sex;
public int age;
//getter setter
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 String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//toString
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]";
}
//有参
public Student(int id, String name, String sex, int age) {
super();
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
//无参
public Student() {
super();
}
}
Student类的学号排序:
package com.scy.homework;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class HomeWorkDemo4 {
public static void main(String[] args) {
//创建集合
List list = new ArrayList<>();
//创建Student对象
Student stu1 = new Student(202001,"张三","男",12);
Student stu2 = new Student(202005,"李四","女",45);
Student stu3 = new Student(202003,"王五","男",18);
Student stu4 = new Student(202004,"马六","男",22);
Student stu5 = new Student(202002,"赵一","男",32);
//将stu对象添加到集合中
list.add(stu1);
list.add(stu2);
list.add(stu3);
list.add(stu4);
list.add(stu5);
for (Student student : list) {
System.out.println(student);
}
System.out.println("=============按学号排序后=============");
Collections.sort(list,new Comparator() {
@Override
public int compare(Student stu, Student student) {
//定义返回值 大小关系
int i=0;
//获取第一个对象的id
int id1 = stu.getId();
//获取第二个对象的id
int id2 = student.getId();
//第一个大于第二个
if (id1>id2) {
i=1;
}else if(id1==id2){//第一个等于第二个
i=0;
}else if(id1
排序字符串
java中提供的类,如:String,包装类都实现了Comparable接口,但有时候这些比较规则不能满足我们的排序需求时,同样可以临时提供一种比较规则来进行排序.
package collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortListDemo3 {
public static void main(String[] args) {
List list = new ArrayList<>();
// list.add("Tom");
// list.add("jackson");
// list.add("rose");
// list.add("jill");
// list.add("ada");
// list.add("hanmeimei");
// list.add("lilei");
// list.add("hongtaoliu");
// list.add("Jerry");
list.add("波多老师");
list.add("小泽老师");
list.add("苍老师");
System.out.println(list);
//按照字符多少排序
// Collections.sort(list);
// Collections.sort(list, new Comparator() {
// public int compare(String o1, String o2) {
return o1.length()-o2.length();
// return o2.length()-o1.length();//反过来减就是降序
// }
// });
Collections.sort(list,(o1,o2)->o2.length()-o1.length());
System.out.println(list);
}
}



