可以从它们的底层数据结构、效率、开销进行阐述哈 2. Collections.sort和Arrays.sort的实现原理 Collection.sort是对list进行排序,Arrays.sort是对数组进行排序。 Collections.sort底层实现 Collections.sort方法调用了list.sort方法 list.sort方法调用了Arrays.sort的方法 因此,Collections.sort方法底层就是调用的Array.sort方法 Arrays.sort底层实现 Arrays的sort方法,如下: 如果比较器为null,进入sort(a)方法。如下: 因此,Arrays的sort方法底层就是: Timesort排序 Timsort排序是结合了合并排序(merge.sort)和插入排序(insertion sort)而得出的排序方法; 1.当数组长度小于某个值,采用的是二分插入排序算法,如下: 3. HashMap原理,java8做了什么改变 4. List 和 Set,Map 的区别 5. poll()方法和 remove()方法的区别? Queue队列中,poll() 和 remove() 都是从队列中取出一个元素,在队列元素为空的情况下,remove() 方法会抛出异常,poll() 方法只会返回 null 。 看一下源码的解释吧: 6. HashMap,HashTable,ConcurrentHash的共同点和区别 HashMap HashTable ConcurrentHashMap 7. 写一段代码在遍历 ArrayList 时移除一个元素 因为foreach删除会导致快速失败问题,fori顺序遍历会导致重复元素没删除,所以正确解法如下: 第一种遍历,倒叙遍历删除 第二种,迭代器删除 8. Java中怎么打印数组? 数组是不能直接打印的哈,如下: 打印数组可以用流的方式Strem.of().foreach(),如下: 打印数组,最优雅的方式可以用这个APi,Arrays.toString() 9. TreeMap底层? 10. HashMap 的扩容过程 Hashmap的扩容: 11. HashSet是如何保证不重复的 可以看一下HashSet的add方法,元素E作为HashMap的key,我们都知道HashMap的可以是不允许重复的,哈哈。 12. HashMap 是线程安全的吗,为什么不是线程安全的?死循环问题? 不是线性安全的。 并发的情况下,扩容可能导致死循环问题。 13. LinkedHashMap的应用,底层,原理 14. 哪些集合类是线程安全的?哪些不安全? 线性安全的 线性不安全的 15. ArrayList 和 Vector 的区别是什么? 16. Collection与Collections的区别是什么? Collections是Java集合框架提供的一个工具类,其中包含了大量用于操作或返回集合的静态方法。如下: 17. 如何决定使用 HashMap 还是TreeMap? 这个点,主要考察HashMap和TreeMap的区别。 TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按key的升序排序,也可以指定排序的比较器。当用Iterator遍历TreeMap时,得到的记录是排过序的。 18. 如何实现数组和 List之间的转换? List 转 Array List 转Array,必须使用集合的 toArray(T[] array),如下: 如果直接使用 toArray 无参方法,返回值只能是 Object[] 类,强转其他类型可能有问题,demo如下: 运行结果: Array 转List 使用Arrays.asList() 把数组转换成集合时,不能使用修改集合相关的方法啦,如下: 运行结果如下: 因为 Arrays.asList不是返回java.util.ArrayList,而是一个内部类ArrayList。 可以这样使用弥补这个缺点: 19. 迭代器 Iterator 是什么?怎么用,有什么特点? 方法如下: Iterator 主要是用来遍历集合用的,它的特点是更加安全,因为它可以确保,在当前遍历的集合元素被更改的时候,就会抛出 使用demo如下: 20. Iterator 和 ListIterator 有什么区别? 21. 怎么确保一个集合不能被修改? 很多朋友很可能想到用final关键字进行修饰,final修饰的这个成员变量,如果是基本数据类型,表示这个变量的值是不可改变的,如果是引用类型,则表示这个引用的地址值是不能改变的,但是这个引用所指向的对象里面的内容还是可以改变滴~验证一下,如下: 运行结果如下: 嘻嘻,那么,到底怎么确保一个集合不能被修改呢,看以下这三哥们~ 再看一下demo吧 运行结果: 23. 什么是Java优先级队列(Priority Queue)? 优先队列PriorityQueue是Queue接口的实现,可以对其中元素进行排序 方法: 特点: 24. JAVA8的ConcurrentHashMap为什么放弃了分段锁,有什么问题吗,如果你来设计,你如何设计。 jdk8 放弃了分段锁而是用了Node锁,减低锁的粒度,提高性能,并使用CAS操作来确保Node的一些操作的原子性,取代了锁。 可以跟面试官聊聊悲观锁和CAS乐观锁的区别,优缺点哈~ 25. 阻塞队列的实现,ArrayBlockingQueue的底层实现? ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列,继承自AbstractBlockingQueue,间接的实现了Queue接口和Collection接口。底层以数组的形式保存数据(实际上可看作一个循环数组)。常用的操作包括 add ,offer,put,remove,poll,take,peek。 可以结合线程池跟面试官讲一下哦~ 26. Java 中的 LinkedList是单向链表还是双向链表? 27. 说一说ArrayList 的扩容机制吧 28. HashMap 的长度为什么是2的幂次方,以及其他常量定义的含义~ 29. ConcurrenHashMap 原理?1.8 中为什么要用红黑树? 30. ArrayList的默认大小 31. 为何Collection不从Cloneable和Serializable接口继承? 32. Enumeration和Iterator接口的区别? 33. 我们如何对一组对象进行排序? 34. 当一个集合被作为参数传递给一个函数时,如何才可以确保函数不能修改它? 35. 说一下HashSet的实现原理? 36. Array 和 ArrayList 有何区别? 37. 为什么HashMap中String、Integer这样的包装类适合作为key? 38. 如果想用Object作为hashMap的Key? 39. 讲讲红黑树的特点? 40. Java集合类框架的最佳实践有哪些? 41.谈谈线程池阻塞队列吧~ 42. HashSet和TreeSet有什么区别? 43. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 44. 说出ArrayList,LinkedList的存储性能和特性 45. HashMap在JDK1.7和JDK1.8中有哪些不同? 46. ArrayList集合加入1万条数据,应该怎么提高效率 47. 如何对Object的list排序 48. ArrayList 和 HashMap 的默认大小是多数? 49. 有没有有顺序的Map实现类,如果有,他们是怎么保证有序的 50. HashMap是怎么解决哈希冲突的 架构学习视频、源码实战文档、java电子书籍、大厂面试资料等等 java电子书部分截图 面试资料 Redis学习视频 数据结构与算法视频 源码解析文档 1. Arraylist与LinkedList区别
for(int i=list.size()-1; i>-1; i--){ if(list.get(i).equals("jay")){ list.remove(list.get(i)); } }
Iterator itr = list.iterator(); while(itr.hasNext()) { if(itr.next().equals("jay") { itr.remove(); }
public class Test { public static void main(String[] args) { String[] jayArray = {"jay", "boy"}; System.out.println(jayArray); } } //output [Ljava.lang.String;@1540e19d
public class Test { public static void main(String[] args) { String[] jayArray = {"jay", "boy"}; Stream.of(jayArray).forEach(System.out::println); } } //output jay boy
public class Test { public static void main(String[] args) { String[] jayArray = {"jay", "boy"}; System.out.println(Arrays.toString(jayArray)); } } //output [jay, boy]
public boolean add(E e) { return map.put(e, PRESENT)==null; }
public interface List<E> extends Collection<E> {
public static <T extends Comparable<? super T>> void sort(List<T> list) { list.sort(null); }
List<String> list = new ArrayList<String>(); list.add("jay"); list.add("tianluo"); // 使用泛型,无需显式类型转换 String[] array = list.toArray(new String
); System.out.println(array[0]);
List<String> list = new ArrayList<String>(); list.add("jay"); list.add("tianluo"); String[] array = (String[]) list.toArray(); System.out.println(array[0]);
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String; at Test.main(Test.java:14)
String[] str = new String[] { "jay", "tianluo" }; List list = Arrays.asList(str); list.add("boy");
Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.add(AbstractList.java:148) at java.util.AbstractList.add(AbstractList.java:108) at Test.main(Test.java:13)
//方式一: ArrayList< String> arrayList = new ArrayList<String>(strArray.length); Collections.addAll(arrayList, strArray); //方式二: ArrayList<String> list = new ArrayList<String>(Arrays.asList(strArray)) ;
public interface Collection<E> extends Iterable<E> { Iterator<E> iterator();
next() 方法获得集合中的下一个元素 hasNext() 检查集合中是否还有元素 remove() 方法将迭代器新返回的元素删除 forEachRemaining(Consumer<? super E> action) 方法,遍历所有元素
ConcurrentModificationException 异常。
List<String> list = new ArrayList<>(); Iterator<String> it = list. iterator(); while(it. hasNext()){ String obj = it. next(); System. out. println(obj); }
public class Test { //final 修饰 private static final Map<Integer, String> map = new HashMap<Integer, String>(); { map.put(1, "jay"); map.put(2, "tianluo"); } public static void main(String[] args) { map.put(1, "boy"); System.out.println(map.get(1)); } }
//可以洗发现,final修饰,集合还是会被修改呢boy
public class Test { private static Map<Integer, String> map = new HashMap<Integer, String>(); { map.put(1, "jay"); map.put(2, "tianluo"); } public static void main(String[] args) { map = Collections.unmodifiableMap(map); map.put(1, "boy"); System.out.println(map.get(1)); } }
// 可以发现,unmodifiableMap确保集合不能修改啦,抛异常了 Exception in thread "main" java.lang.UnsupportedOperationException at java.util.Collections$UnmodifiableMap.put(Collections.java:1457) at Test.main(Test.java:14)
public class PriorityQueue<E> extends AbstractQueue<E> implements java.io.Serializable { ... private final Comparator<? super E> comparator;
peek()//返回队首元素 poll()//返回队首元素,队首元素出队列 add()//添加元素 size()//返回队列元素个数 isEmpty()//判断队列是否为空,为空返回true,不空返回false
资料部分截图展现
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算