没有合适的资源?快使用搜索试试~ 我知道了~
Vector,ArrayList, LinkedList的区别是什么? 答: 1. Vector、ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形 式进行存储。 2. List中的元素有序、允许有重复的元素,Set中的元素无序、不允许有重复元素。 3. Vector线程同步,ArrayList、LinkedList线程不同步。 4. LinkedList适合指定位置插入、删除操作,不适合查找;ArrayList、Vector适合查 找,不适合指定位置的插入、删除操作。 5. ArrayList在元素填满容器时会自动扩充容器大小的50%,而Vector则是100%,因 此ArrayList更节省空间。 HashTable, HashMap,TreeMap区别? 答: 1. HashTable线程同步,HashMap非线程同步。 2. HashTable不允许<键,值>有空值,HashMap允许<键,值>有空值。 3. HashTable使用Enumeration,HashMap使用Iterator。 4. HashTable中hash数组的默认大小是1
资源推荐
资源详情
资源评论
Java
基
础
Vector,ArrayList, LinkedList
的
区
别
是
什么
?
答:
1.Vector、ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形
式进行存储。
2.List中的元素有序、允许有重复的元素,Set中的元素无序、不允许有重复元素。
3.Vector线程同步,ArrayList、LinkedList线程不同步。
4.LinkedList适合指定位置插入、删除操作,不适合查找;ArrayList、Vector适合查
找,不适合指定位置的插入、删除操作。
5.ArrayList在元素填满容器时会自动扩充容器大小的50%,而Vector则是100%,因
此ArrayList更节省空间。
HashTable, HashMap
,
TreeMap
区
别
?
答:
1.HashTable线程同步,HashMap非线程同步。
2.HashTable不允许<键,值>有空值,HashMap允许<键,值>有空值。
3.HashTable使用Enumeration,HashMap使用Iterator。
4.HashTable中hash数组的默认大小是11,增加方式的old*2+1,HashMap中
hash数组的默认大小是16,增长方式一定是2的指数倍。
5.TreeMap能够把它保存的记录根据键排序,默认是按升序排序。
HashMap
的
数
据
结
构
jdk1.8之前list + 链表
jdk1.8之后list + 链表(当链表长度到8时,转化为红黑树)
HashMap
的
扩
容
因
子
默认0.75,也就是会浪费1/4的空间,达到扩容因子时,会将list扩容一倍,0.75 是时间与
空间一个平衡值;
多
线
程
修
改
HashMap
多线程同时写入,同时执行扩容操作,多线程扩容可能死锁、丢数据;可以对HashMap 加入
同步锁Collections.synchronizedMap(hashMap),但是效率很低,因为该锁是互斥锁,同一
时刻只能有一个线程执行读写操作,这时候应该使用ConcurrentHashMap
LinkedHashMap
Java LinkedHashMap工作原理及实现
Java集合框架:LinkedHashMap
注
意
:
在
使
用
Iterator
遍
历
的
时
候
,
LinkedHashMap
会
产
生
java.util.ConcurrentModificationException
。
扩展HashMap增加双向链表的实现,号称是最占内存的数据结构。支持iterator()时按
Entry的插入顺序来排序(但是更新不算, 如果设置accessOrder属性为true,则所有读
写访问都算)。实现上是在Entry上再增加属性before/after指针,插入时把自己加到
Header Entry的前面去。如果所有读写访问都要排序,还要把前后Entry的
before/after拼接起来以在链表中删除掉自己。
说说
你
知
道
的
几
个
Java
集
合
类
:
list
、
set
、
queue
、
map
实
现
类
描
述
一下
ArrayList
和
LinkedList
各
自
实
现
和
区
别
Java基础篇(四):ArrayList和LinkedList内部实现、区别、使用场景
Java
中
的
队
列
都
有
哪
些
,
有
什么
区
别
1.ArrayDeque,(数组双端队列)
2.PriorityQueue,(优先级队列)
3.ConcurrentLinkedQueue,(基于链表的并发队列)
4.DelayQueue,(延期阻塞队列)(阻塞队列实现了BlockingQueue接口)
5.ArrayBlockingQueue,(基于数组的并发阻塞队列)
6.LinkedBlockingQueue,(基于链表的FIFO阻塞队列)
7.LinkedBlockingDeque,(基于链表的FIFO双端阻塞队列)
8.PriorityBlockingQueue,(带优先级的无界阻塞队列)
9.SynchronousQueue(并发同步阻塞队列)
反
射
中
,
Class.forName
和
classloader
的
区
别
java反射中,Class.forName和classloader的区别(代码说话)
Java7
、
Java8
的
新
特
性
java7,8的几个特性
Java
数
组
和
链
表
两
种
结
构
的
操
作
效
率
,
在
哪
些
情
况
下
(
从
开
头
开
始
,
从
结
尾
开
始
,
从
中
间
开
始
)
,
哪
些
操
作
(
插
入
,
查
找
,
删
除
)
的
效
率
高
讲讲
IO
里
面
的
常
见
类
,
字
节
流
、
字
符
流
、
接
口
、
实
现
类
、
方
法
阻
塞
Java IO流详解(二)——IO流的框架体系
讲讲
NIO
NIO技术概览
缓
冲
区
虚
拟
内
存
&&
内
存
空
间
的
映
射
三个
channel
使
用
ServerSocketChannel||SocketChannel||FileChannel
Java NIO系列教程(八) SocketChannel
Java NIO系列教程(九) ServerSocketChannel
Java NIO系列教程(七) FileChannel
String
编
码
UTF-8
和
GBK
的
区
别
GBK编码:是指中国的中文字符,其实它包含了简体中文与繁体中文字符,另外
还有一种字符“gb2312”,这种字符仅能存储简体中文字符。
UTF-8编码:它是一种全国家通过的一种编码,如果你的网站涉及到多个国家的
语言,那么建议你选择UTF-8编码。
GBK和UTF8有什么区别?
UTF8编码格式很强大,支持所有国家的语言,正是因为它的强大,才会导致它占用的空间大
小要比GBK大,对于网站打开速度而言,也是有一定影响的。
GBK编码格式,它的功能少,仅限于中文字符,当然它所占用的空间大小会随着它的功能而
减少,打开网页的速度比较快。
什么
时
候
使
用
字
节
流
、
什么
时
候
使
用
字
符
流
什么时候使用字节流、什么时候使用字符流,二者的区别
递
归
读
取
文
件
夹
下
的
文
件
,
代
码
怎
么
实
现
/**
* 递归读取文件夹下的 所有文件
*
* @param testFileDir 文件名或目录名
*/
private static void testLoopOutAllFileName(String testFileDir) {
if (testFileDir == null) {
//因为new File(null)会空指针异常,所以要判断下
return;
}
File[] testFile = new File(testFileDir).listFiles();
if (testFile == null) {
return;
}
for (File file : testFile) {
if (file.isFile()) {
System.out.println(file.getName());
} else if (file.isDirectory()) {
System.out.println("-------this is a directory, and its files are as
follows:-------");
testLoopOutAllFileName(file.getPath());
} else {
System.out.println("文件读入有误!");
}
}
}
Object.finalize
深入分析Object.finalize方法的实现原理
SynchronousQueue
实
现
原
理
SynchronousQueue实现原理
跳
表
SkipList
跳表(SkipList)及ConcurrentSkipListMap源码解析
Collections.sort
排
序
算
法
深入jdk——追踪Collections.sort 引发的bug(1)mergeSort
自
定
义
类
加
载
器
JVM——自定义类加载器
Java
并
发和
并
行
并发:是指两个或多个事件在同一时间间隔发生,在一台处理器上“同时”处理多
个任务;
并行:是指两个或者多个事件在同一时刻发生,在多台处理器上同时处理多个任
务。
怎
么
提
高
并
发
量
,
请
列
举
你
所
知
道
的
方
案
?
高并发解决方案——提升高并发量服务器性能解决思路
系
统
的
用
户
量
有
多
少
?
多
用
户
并
发
访
问
时
如
何
解
决
?
大型网站是怎样解决多用户高并发访问的
说说
阻
塞
队
列
的
实
现
:
可
以
参
考
ArrayBlockingQueue
的
底
层
实
现
(
锁
和同
步
都
行
)
Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue实现原理分析
进
程
通
讯
的
方
式
:
消
息
队
列
,
共
享
内
存
,
信
号
量
,
socket
通
讯
等
Linux进程间通信方式--信号,管道,消息队列,信号量,共享内存
用
过
并
发
包
的
哪
些
类
Excutors
可
以
产
生
哪
些
线
程
池
为什么
要
用
线
程
池
为什么要使用线程池
线
程
池
的
基
础
概
念
core,maxPoolSize,keepalive
执行任务时
1.如果线程池中线程数量<core,新建一个线程执行任务;
2.如果线程池中线程数量>=core,则将任务放入任务队列
3.如果线程池中线程数量>=core且<maxPoolSize,则创建新的线程;
4.如果线程池中线程数量>core,当线程空闲时间超过了keepalive时,则会销毁线
程;由此可见线程池的队列如果是无界队列,那么设置线程池最大数量是无效的;
自
带
线
程
池
的
各
种
坑
1.Executors.newFixedThreadPool(10);
固定大小的线程池:
它的实现new ThreadPoolExecutor(10, 10, 0L, TimeUnit.MILLISECONDS,new
LinkedBlockingQueue<Runnable>());
初始化一个指定线程数的线程池,其中corePoolSize == maximumPoolSize,使用
LinkedBlockingQuene作为阻塞队列,当线程池没有可执行任务时,也不会释放线程。
由于LinkedBlockingQuene的特性,这个队列是无界的,若消费不过来,会导致内存被任务
队列占满,最终oom;
2.Executors.newCachedThreadPool();
缓存线程池:
它的实现new ThreadPoolExecutor(0,Integer.MAX_VALUE,60L, TimeUnit.SECONDS,new
SynchronousQueue<Runnable>());
初始化一个可以缓存线程的线程池,默认缓存60s,线程池的线程数可达到
Integer.MAX_VALUE,即2147483647,内部使用SynchronousQueue作为阻塞队列;和
newFixedThreadPool创建的线程池不同,newCachedThreadPool在没有任务执行时,当线程
的空闲时间超过keepAliveTime,会自动释放线程资源,当提交新任务时,如果没有空闲线
程,则创建新线程执行任务,会导致一定的系统开销,因为线程池的最大值了
剩余31页未读,继续阅读
资源评论
Java码库
- 粉丝: 1423
- 资源: 3918
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功