一、Comparable接口, Collections类
List的常用算法:
- sort(List); 排序,如果需要对自定义的类进行排序, 那就必须要让其实现Comparable接口, 实现比较两个类大小的方法
- shuffle(List); 随机排列
- void reverse(List); 逆序排列(Linked效率较高)
- copy(); 复制集合, 前提是size()相同(长度, 和容量的区别)
- fill(List, Object);使用某个对象填充整个List
- binarySearch();//使用二分搜索法之前先排序
例子:
package collectiontext; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Text2 { @SuppressWarnings("unchecked") public static void main(String[] args) { List list = new ArrayList(); list.add("aaaa"); list.add("qqqq"); list.add("cccc"); list.add("xxxx"); System.out.println(list); System.out.println("-------------------------"); //顺序排列 Collections.sort(list);//sort(List);排序,如果需要对自定义的类进行排序, 那就必须要让其实现Comparable接口, //实现比较两个类大小的方法 System.out.println(list); //随机排列 Collections.shuffle(list);//shuffle(List); 随机排列 System.out.println(list); //反转排列(逆序排列) Collections.reverse(list);//void reverse(List); 逆序排列(Linked效率较高) System.out.println(list); System.out.println("-------------------------"); List list2 = new ArrayList(); list2.add("1"); list2.add("2"); list2.add("3"); list2.add("4"); Collections.copy(list2, list);//copy();复制集合, 前提是size()相同(注意长度, 和容量的区别) System.out.println(list2); System.out.println("-------------------------"); Collections.fill(list2, new Person());//fill(List, Object);使用某个对象填充整个List System.out.println(list2); System.out.println("-------------------------"); List list3 = new ArrayList(); for (int i = 0; i < 10; i++) { list3.add(i); } int a = Collections.binarySearch(list3, 8);//binarySearch();一定要注意,使用二分搜索法之前先排序, //这里刚好是排好序的,不好看出来,但是一定要注意 System.out.println(a); System.out.println(list3); } } class Person{ @Override public String toString() { return "Person []"; } }
二、泛型(Generic):里面写的一定是引用类型
1, 装入集合的类型都被当作Object对待, 从而失去了自己的实际类型
2, 集合中取出来的时候需要转型, 效率低, 易出错
好处: 增强程序的可读性和稳定性
例子:
package collectiontext; import java.util.ArrayList; import java.util.List; public class Text3 { public static void main(String[] args) { List<String> list = new ArrayList<String>();//这个list里面只能装String类型的东西 List<Person2> list2 = new ArrayList<Person2>();//这个list里面只能装Person2类型的东西 List<Student> list3 = new ArrayList<Student>(); list.add("qqq"); list2.add(new Person2()); list2.add(new Student());//Student继承了Person,即父类的引用指向子类的对象,多态的问题 list3.add(new Student()); } } class Person2{ //定义了一个Person2类,通俗一点,就是定义了一个Person2类型 } class Student extends Person2{ }
三、Comparable接口:一个方法(comparaTo)
int compareTo(T o)
将此对象与指定的对象进行比较以进行排序。
- 该对象小于指定对象,返回一个负整数(-1);
- 该对象等于指定对象,返回一个零(0);
- 该对象大于指定对象,返回一个正整数(1);
例子:
package collectiontext; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Text4 { public static void main(String[] args) { List<Animals> list = new ArrayList<Animals>(); for (int i = 0; i < 5; i++) { list.add(new Animals("name" + i, i+5)); } System.out.println(list); Collections.sort(list); System.out.println(list); } } class Animals implements Comparable<Animals> { private String name; private int age; public Animals(String name, int age) { super(); this.name = name; this.age = age; } @Override public int compareTo(Animals o) { // TODO Auto-generated method stub if(this.age > o.age){ return -1; } else if(this.age < o.age){ return 1; } else{ return this.name.compareTo(o.name); } } @Override public String toString() { return "Animals [name=" + name + ", age=" + age + "]"; } }