java中的常见问题

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

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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值