Collections简介及常用功能
java.util.Collections是集合工具类,用来对集合进行操作。
部分主要方法如下:
public static void reverse(List<?> list) 反转指定list中的顺序。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
public class CollectionsDemo01 {
public static void main(String[] args) {
ArrayList<String > list = new ArrayList<String>();
list.add("你好么");
list.add("谢谢");
list.add("我很好");
Collections.reverse(list);
Iterator iter = list.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
}
}
计算结果:
我很好
谢谢
你好么
public static <T> boolean addAll(Collection<? super T> c, T... elements)往集合中添加一些元素。添加的元素可能是数组或者单个元素。
源码如下:
@SafeVarargs
public static <T> boolean addAll(Collection<? super T> c, T... elements) {
boolean result = false;
for (T element : elements)
result |= c.add(element);
return result;
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
public class CollectionsDemo01 {
public static void main(String[] args) {
ArrayList<String > list = new ArrayList<String>();
list.add("你好么");
list.add("谢谢");
list.add("我很好");
Iterator iter = list.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
String[] str = {"我来自哪里","我是谁"};
Collections.addAll(list,str);
for (String s : list) {
System.out.println(s);
}
}
}
运行结果:
你好么
谢谢
我很好
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
你好么
谢谢
我很好
我来自哪里
我是谁
public static void swap(List<?> list, int i, int j) :交换集合中指定两个下标元素位置。
import java.util.ArrayList;
import java.util.Collections;
public class CollectionsDemo01 {
public static void main(String[] args) {
ArrayList<String > list = new ArrayList<String>();
list.add("你好么");
list.add("谢谢");
list.add("我很好");
Collections.swap(list,1,2);
for (String s : list) {
System.out.println(s);
}
}
}
运行结果:
你好么
我很好
谢谢
public static <T extends Comparable<? super T>> void sort(List<T> list)集合list继承Comparable后根据compareTo方法排序
import java.util.ArrayList;
import java.util.Collections;
public class CollectionsDemo01 {
public static void main(String[] args) {
ArrayList<Student > list = new ArrayList<Student>();
list.add(new Student("张三",18));
list.add(new Student("李四",15));
list.add(new Student("王二",19));
list.add(new Student("麻子",18));
Collections.sort(list);
for (Student s : list) {
System.out.println(s);
}
}
}
class Student implements Comparable<Student>{
private String name;
private int age;
//按照年龄大小排序
@Override
public int compareTo(Student s) {
if (s.age == this.age) {
return 0;
} else if(s.age > this.age){
return 1;
}
return -1;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
运行结果:
Student{name='王二', age=19}
Student{name='张三', age=18}
Student{name='麻子', age=18}
Student{name='李四', age=15}
public static <T> void sort(List<T> list, Comparator<? super T> c)
:将集合中元素按照指定规则排序。
package task03;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class CollectionsDemo01 {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<Student>();
list.add(new Student("张三",18));
list.add(new Student("李四",15));
list.add(new Student("王二",19));
list.add(new Student("麻子",18));
Collections.sort(list,Comparator.comparing(Student::getAge));
for (Student s : list) {
System.out.println(s);
}
}
}
class Student implements Comparator<Student> {
private String name;
private int age;
//按照年龄大小排序
@Override
public int compare(Student o1, Student o2) {
if (o1.age == o2.age) {
return 0;
} else if (o1.age > o2.age) {
return 1;
}
return -1;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
运行结果:
Student{name='李四', age=15}
Student{name='张三', age=18}
Student{name='麻子', age=18}
Student{name='王二', age=19}
Comparable和Comparator两个接口的区别。
Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的
compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码
实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进
行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
Comparator:强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort
或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构
(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。