图片比较大,可能看不太清楚,可以单击右键选择查看图片,看大图
这里截取截取几个比较重要的展示吧,具体的大家看图了
arraylist---类:数组实现,查找快,线程不安全,效率高,最常用的集合之一
去重:
//注意,自定义对象必须重写 equals 方法才能实现去重
//因为 contions ();底层是依靠 equals 实现的
ArrayList<Student> a = new ArrayList<Student>();
a.add(new Student("张三",23));
a.add(new Student("张三",23));
a.add(new Student("李四",24));
//获取迭代器对象
Iterator<Student> i = a.iterator();
//创建新集合
ArrayList<Student> a1 = new ArrayList<Student>();
while (i.hasNext()) {
Student s = i.next();//.next();有个指针不能连续调用
if (!a1.contains(s)) {
a1.add(s);
}
}
TreeSet---类:在保证数据唯一性的情况下对数据进行排序,排序的功能由二叉树算法实现
两种实现方法:
方法一:自定义对象实现compareable接口,并且重写其中的compareTo方法
public class Student implements Comparable<Student>
@Override
public int compareTo(Student o) {
int num = this.age - o.age;
return num == 0 ? this.name.compareTo(o.name) : num;
}
自定义对象实现了该接口之后,直接传入,TreeSet 集合就可以实现排序和去重
当我们要保留重复元素的时候可以这样
return num == 0 ? 1 : num;
注意:
this.age - o.age; 是从小到大
o.age - this.age 是从到小
这跟二叉树的算法有关,存法:返回值为负数存左边,为正存右边,为0不存
取法:默认先取左边
方法二:在创建TreeSet对象的时候通过构造方法传入比较器(实现了comparator的对象实例,一般通过匿名内部类实现)
TreeSet<Student> t = new TreeSet<Student>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int num = o1.getAge() - o2.getAge();
return num == 0 ? o1.getName().compareTo(o2.getName()) : num;
}
});
我们一般是通过构造方法传入 comparator 的匿名子类对象
o1.getAge() - o2.getAge(); 从小到大
o2.getAge() - o1.GetAge(); 从大到小
--------------------------------------------------------------------------------------------------------------------------------------------------------------
好了,我就写这么多了,具体的大家看图了啊