java中的常见问题(一)
1. java中的常用容器
- 常用的List包括ArrayList、LinkedList、Vector;
- 常用的Set包括HashSet、TreeSet、LinkedHashSet;
- 常用的Map包括HashMap、TreeMap、SortMap、LinkedHashMap、ConcurrentHashMap等;
- Queue包括Deque和PriorityQueue;
框图:

2.List和Set的区别,以及什么是不可重复
区别:
- list是一个有序的容器,保持了每个元素的插入顺序。而set是无序容器,无法保证每个元素的存储顺序;
- list可以放重复的对象,而set不允许重复;
- list可以插入多个null元素,而set只允许插入一个null元素
不可重复:
Set底层使用的是Map结构,但是其map结构对应的value值为null,因此每添加一个对象就作为map的key,而Map中的key不允许重复,所以Set也就不允许重复了。判断两个对象是否相等,要判断hashCode相等,并且equals()方法返回值为true才能证明两个对象相等。
3.HashMap是否线程安全,如果想用线程安全的HashMap怎么做?
(1)HashMap不是线程安全的,在多线程环境下不建议使用。
(2)想用线程安全的HashMap可以利用ConcurrentHashMap。
- JDK1.8 中的ConcurrentHashMap 选择了与 HashMap 相同的Node数组+链表+红黑树结构;在锁的实现上,抛弃了原有的 Segment 分段锁,采用CAS + synchronized实现更加细粒度的锁,保证了安全
- 将锁的级别控制在了更细粒度的哈希桶数组元素级别,也就是说只需要锁住这个链表头节点(红黑树的根节点),就不会影响其他的哈希桶数组元素的读写,大大提高了并发度。
4.编写一个单例模式,常见的单例有哪些,分别列举?
(1)懒汉式:
public class Slacker {
/*
* 懒汉式单例:用的时候再初始化
*/
private static Slacker instance = null;//定义
private void slacker() {
}
public static Slacker getInstance() {
if (instance == null) {
instance = new Slacker();//初始化
}
return instance;
}
}
(2)饿汉式:
public class Hungry {
/*
饿汉式:一上来就初始化
*/
private static final Hungry instance=new Hungry(); //初始化
private void hungry() {
}
public static Hungry getInstance() {
return instance;
}
}
(3)懒汉加锁:
/*
加锁的懒汉式
*/
public class Lock_up {
private volatile static Lock_up instance = null;
private void Lock_up() {
}
private static Lock_up getinstance() {
if (instance == null) {
synchronized (Lock_up.class) {
// 加锁保证instance为空时,创建一个实例
if(instance==null

本文探讨了Java中的核心概念,包括常用容器如ArrayList、HashMap和ConcurrentHashMap,以及List和Set的区别。文章还涉及了线程安全问题,指出HashMap非线程安全并介绍了如何使用ConcurrentHashMap实现线程安全。此外,讨论了单例模式的四种实现方式,并简单概述了排序算法,特别是快速排序。最后提到了TCP的三次握手和四次挥手过程,以及HTTP中的GET和POST方法的区别。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



