一、用单向链表手写LinkedList
二、Set集合
List:有序的,可重复的,可以根据
Set : 无序的(存储的顺序与内部真实存放 的顺序不保证一致),去重的,不可以根据
索引使用的
实现类:HashSet、TreeSet
set定义:不包含重复元素的集合 无新增方法
遍历方式 : foreach 、iterator
三、TreeSet
底层结构:红黑树(平衡二叉树)
特点:自动做升序排序
应用场景 : 适合应用在想要对数据根据指定规则做升序|降序排序的情况下
新增方法 : 新增了一些比较大小相关的方法
遍历方式:foreach Iterator descendingIterator(逆序)
此实现不同步
//E ceiling(E e) //返回此集合中大于或等于给定元素的最小元素,如果没有这样的元素,则null 。 System.out.println(set.ceiling(3.1)); //E floor(E e) //返回此集合中小于或等于给定元素的最大元素,如果没有这样的元素,则null 。 System.out.println(set.floor(3.1)); //E first() //返回此集合中当前的第一个(最低)元素。 //E last() //返回此集合中当前的最后一个(最高)元素。 System.out.println(set.first()); System.out.println(set.last()); //E higher(E e) //返回此集合中严格大于给定元素的最小元素,如果没有这样的元素,则null 。 //E lower(E e) //返回此集合中严格小于给定元素的最大元素,如果没有这样的元素,则null 。 System.out.println(set.higher(3.1)); System.out.println(set.lower(3.1)); //E pollFirst() //检索并删除第一个(最低)元素,如果此集合为空,则返回null 。 //E pollLast() //检索并删除最后一个(最高)元素,如果此集合为空,则返回null 。 System.out.println(set.pollFirst()); System.out.println(set);
四、比较器
排序:boolean型:先false 后ture
char,String根据码排序
不同类型的集合与存储对象集合的不能默认排序
定义比较规则:
内部比较器|自然排序|默认比较规则:
要比较的类型实现Comparable接口,重写compareTo(T o)方法,方法的内部定义比较规则
TreeSet<Employee> set = new TreeSet<>(); //默认使用内部比较器(自然排序) @Override public int compareTo(Employee o) { //this : x : 101 //o : y : 102 //return this.no - o.no; //根据员工编号做升序排序 //return o.no - this.no; //根据员工编号做降序排序 //return Double.compare(this.sal,o.sal); //根据薪资做升序 return o.name.compareTo(this.name); //根据员工姓名做降序排序 }
外部比较器|定制排序|自定义比较规则:
实现类实现 Comparator<T>接口,重写compare(T o1, T o2) 方法,方法的内部定义比较规则
//外部比较器 class Test implements Comparator<Employee>{ @Override public int compare(Employee o1, Employee o2) { return Double.compare(o1.getSal(),o2.getSal()); } } //匿名内部类简化 TreeSet<Employee> set = new TreeSet<>(new Comparator<Employee>() { @Override public int compare(Employee o1, Employee o2) { return Double.compare(o2.getSal(),o1.getSal()); } }); //lambda表达式 TreeSet<Employee> set = new TreeSet<>(( o1, o2) -> Double.compare(o1.getSal(),o2.getSal()));
五、HashSet
底层逻辑结构:哈希表(jdk1.7之前:数组+链表 1.7之后:数组+链表+红黑树)
特点:查询增删效率较高
应用场景:适合大量做查询增删的需求下
去重 : 一般结合业务都想要根据对象的内容做去重
在对象类型中根据内容重写hashCode与equals方法
注意 : 前提在根据内容重写 hashCode与equals方法之后 :
hashCode相等,equals一定相等 :不一定
equals相等,hashCode相等 : 一定相等