java list 取一列_JAVA核心

1.集合

>Java中有哪些常用集合容器

JAVA中集合主要分为Collection和Map两大类,Collection包含List、Set、Queue。

常用的子类有:ArrayList、HashSet、HashMap等

>ArrayList、LinkedList、Vector

List是有序可重复集合。

Vector是List接口下线程安全的集合,很多方法都使用了synchronized来保障线程安全,但是也仅仅在增删等单独动作起作用,但是如果你调用了多个动作,相互之间有联系,还是会有线程安全问题,而且使用synchronized本身也是有一些性能影响。综合考虑下来,vector大多数情况下并不是一个值得优先考虑的集合容器。

ArrayList底层原理是数组,可以动态扩容(底层通过数组拷贝达到扩容效果)。就是由于底层使用了数组,所以自身的特点也是围绕这数组来,查找速度快,插入和删除效率低。

LinkedList底层原理是链表,插入和删除效率高,查找效率差(要进行遍历查找)。

>HashSet

set是无序不可重复的集合,不可重复是它的特性。

HashSet是哈希表结构,底层由HashMap实现。具体添加元素的过程与hashCode和equals有关,先判断hashCode是否相同,如果相同则进行equals判断,如果不同则直接插入。(具体点说其实就相当于调用了HashMap的put)

>ArrayBlockingQueue、ConcurrentLinkedQueue、DelayQueue

队列是一种特殊的数据结构,遵循FIFO,可分为两种,阻塞队列,非阻塞队列。

阻塞队列(eg:ArrayBlockingQueue)是通过锁机制实现的,非阻塞队列(eg:ConcurrentLinkedQueue)是通过循环CAS实现的。

阻塞队列由于阻塞性能上比非阻塞队列会低效一点,但是非阻塞也不是意味着更好,无限制的情况,队列的不断堆积扩张很可能会导致内存不够等等问题,没有绝对的优势,只有是否更加合适,具体要看生成者和消费者的生产和消费相对速度和一些特殊需求。

DelayQueue是比较特殊的一种阻塞队列,放入其中的对象需要实现Delayed接口。DelayQueue最主要的两点是排序(基于PriorityQueue实现)和延时,排序使最早到期的最早被消费,如果没有到时间,则无法获取到对象,poll方法返回的是null。

>HashMap

很经典的key-value数据结构。key必须要是Object对象类型。

2. IO

>有哪些IO流

按处理单位分,主要有字节流(一次性读取8位二进制)和字符流(一次性读取16位二进制)。

IO四大类:InputStream(字节输入流),OutputStream(字节输出流),Reader(字符输入流),Writer(字符输出流)。它们各自还有很多子类,是为了满足文件,网络,管道等不同场景的 IO 需求。

>BIO、NIO、AIO

BIO是同步阻塞IO,使用简单,但是并发能力弱。

NIO是同步非阻塞IO,线程是同步状态的,但是IO是非阻塞的,通过轮询可以支持多个IO读写。

AIO是NIO升级版,线程也是异步状态的,并发能力更强。

理论上的AIO是性能最优的,但是由于一些情况,AIO一个请求一个线程,而单机线程资源是有限的,再者linux上AIO并不是十分成熟。

3.多线程

>并发和并行

并行指多个事件在同一个时刻发生;并发指多个事件在间隔很短的时间内相继发生。

并行是同时处理多个任务的能力,并发是处理多个任务的能力。

>进程和线程

进程是资源分配的最小单位,线程是CPU调度的最小单位

下面摘抄了biaodianfu 的回答:

做个简单的比喻:进程=火车,线程=车厢

  • 线程在进程下行进(单纯的车厢无法运行)
  • 一个进程可以包含多个线程(一辆火车可以有多个车厢)
  • 不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)
  • 同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)
  • 进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)
  • 进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)
  • 进程可以拓展到多机,进程最多适合多核(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上)
  • 进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-"互斥锁"
  • 进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-“信号量”

>同步和阻塞

同步/异步是调用等待结果返回还是立即返回,而阻塞/非阻塞是调用时的状态。

4.锁

>锁的分类

java中的各种锁详细介绍 - JYRoy - 博客园​www.cnblogs.com
224bf07ac48fedb1546b63a83141931b.png

>CAS

chenchenchen:深入理解CAS算法原理​zhuanlan.zhihu.com

5.反射

反射真的很好玩

一二三冲鸭:Java反射使用总结​zhuanlan.zhihu.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值