打印结果
原始数组:[-1 , 3,3,-5,7,4,-9 , -7]Collections.reverse(arrayList):[-7, -9 , 4, 7,-5,3, 3,-1]Collections.sort(arrayList):[-9 , -7, -5,-1,3,3,4,7]定制排序后:[7, 4,3,3,-1 , -5, -7,-9]
重写 compareTo 方法实现按年龄来排序// person对象没有实现Comparable接口,所以必须实现 , 这样才不会出错 , 才可以使treemap中的数据按顺序排列// 前面一个例子的String类已经默认实现了Comparable接口,详细可以查看String类的API文档,另外其他// 像Integer类等都已经实现了Comparable接口,所以不需要另外实现了public class Person implements Comparable<Person> {private String name;private int age;public Person(String name,int age) {super();this.name = name;this.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;}/*** T重写compareTo方法实现按年龄来排序*/@Overridepublic int compareTo(Person o) {if (this.age > o.getAge()) {return 1;}if (this.age < o.getAge()) {return -1;}return 0;}}
public static void main(String[] args) {TreeMap<Person , String> pdata = https://www.huyubaike.com/biancheng/new TreeMap
Output:
5-小红10-王五20-李四30-张三
2. 无序性和不可重复性的含义是什么什么是无序性?无序性不等于随机性,无序性是指存储的数据在底层数组中并非按照数组索引的顺序添加,而是根据数据的哈希值决定的 。
什么是不可重复性?不可重复性是指添加的元素按照 equals()判断时 ,返回 false , 需要同时重写 equals()方法和 HashCode()方法 。
3. 比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同
HashSet
、LinkedHashSet
和TreeSet
都是Set
接口的实现类,都能保证元素唯一,并且都不是线程安全的 。HashSet
、LinkedHashSet
和TreeSet
的主要区别在于底层数据结构不同 。HashSet
的底层数据结构是哈希表(基于HashMap
实现) 。LinkedHashSet
的底层数据结构是链表和哈希表,元素的插入和取出顺序满足 FIFO(先进先出) 。TreeSet
底层数据结构是红黑树 , 元素是有序的,排序的方式有自然排序和定制排序 。
- 底层数据结构不同又导致这三者的应用场景不同 。
HashSet
用于不需要保证元素插入和取出顺序的场景,LinkedHashSet
用于保证元素的插入和取出顺序满足 FIFO 的场景,TreeSet
用于支持对元素自定义排序规则的场景
Queue
是单端队列,只能从一端插入元素 , 另一端删除元素,实现上一般遵循 先进先出(FIFO) 规则 。Queue
扩展了 Collection
的接口 , 根据 因为容量问题而导致操作失败后处理方式的不同 可以分为两类方法: 一种在操作失败后会抛出异常,另一种则会返回特殊值 。Queue
接口抛出异常返回特殊值插入队尾add(E e)offer(E e)删除队首remove()poll()查询队首元素element()peek()【Java集合精选常见面试题】Deque
是双端队列,在队列的两端均可以插入或删除元素 。Deque
扩展了 Queue
的接口 , 增加了在队首和队尾进行插入和删除的方法,同样根据失败后处理方式的不同分为两类:Deque
接口抛出异常返回特殊值插入队首addFirst(E e)offerFirst(E e)插入队尾addLast(E e)offerLast(E e)删除队首removeFirst()pollFirst()删除队尾removeLast()pollLast()查询队首元素getFirst()peekFirst()查询队尾元素getLast()peekLast()事实上,Deque
还提供有 push()
和 pop()
等其他方法 , 可用于模拟栈 。ArrayDeque 与 LinkedList 的区别
ArrayDeque
和 LinkedList
都实现了 Deque
接口,两者都具有队列的功能,但两者有什么区别呢?