文档章节

java容器学习

四月李
 四月李
发布于 2015/12/17 20:39
字数 818
阅读 152
收藏 3

java容器:

    容器,顾名思义,就是用来存放东西的道具,但是在我们程序开发中容器的概念就是用来存在我们数据对象的引用。

    往常的数组存储,由于数组开始的长度已经指定,开发过程中不能随意修改,导致了后续的麻烦,而且在存放的类型还必须是相同的类型,因此java API给开发者提供了java 容器,java内的容器类都是继承了Collection接口,再次在进行扩展。

java内的容器主要有List, Set,Map三种

1:List 继承了Collection接口,他的主要实现类主要有ArrayList和LinkedList,Vector,其中ArrayList是顺序结构动态数组表,LinkedList是链表,Vector是向量,Stack实现了Vector,Vector和Stack现在不经常用。下面简要看一下ArrayList和LinkedList

ArrayList:允许null元素,读取速度比较快,但是修改起来比较麻烦,需要将数组整体后移,他的存储空间是连续的

LinkedList:读取速度比ArrayList慢,但是修改起来容易,若果删除或者新增只需要修改指针的指向就行,他的存储空间是不连续的。

Vector:是线程安全的。用的比较少了

2:set继承了Collection接口,他的主要实现类HashSet,set是数学中定义的集合,所以set中的数据没有顺序而且不允许重复,HashSet中存放的是只是对象的值。

2:Map没有继承collection接口,它提供了Key-value的键值对映射,不允许key值有重复,如果有重复那么他会覆盖。他的主要实现类为HashMap和HashTable,TreeMap,LinkedHashMap,WeakHashMap,IdentifyHashMap,我们平常用的比较多的就是HashMap和Hashtable,两者比起来,HashMap是异步的,他提供的键值对的映射,允许null,HashTable是线程安全的,但不允许插入null,

注意一点就是HashMap和HashSet,HashTable的区别:

    HashMap:实现了map接口,由于他是异步的,所以线程不是安全的,如果需要实现线程安全需要用Collection框架下其他路径进行实现,他存放的是键值对,允许为空的值(key和value)都可以,他是用来取代Hashtable的,他计算哈希值是通过键值对来计算,此外他的访问速度比较快,因为他通过一个唯一的key来检索对象,他用put进行添加元素;hashmap采用HashMap.entrySet().iterator()方法进行遍历

    HashSet:实现了set接口,存放的对象指,不允许空的对象,他计算哈希值是通过成员对象来计算哈希值,此外他的访问速度比HashMap慢,他用add进行元素的添加;

    HashTable:他实现了map接口,但是他是线程安全的,他不允许插入null值,Hashtable遍历使用Enumeration()进行遍历,

但是java程序中对set用的比较少,此外HashMap是在jdk5版本以上用来替代Hashtable的,HashMap的线程安全采用Collections.synchronizedMap(hashmap)的方法。

我们平常用的多的是HashMap,ArrayList,LinkedList比较多,Vector和Stack以及set,Hashtable用的比较少,

HashMap,ArrayList,LinkedList三个都不是线程安全的。


© 著作权归作者所有

四月李
粉丝 16
博文 59
码字总数 50238
作品 0
成都
程序员
私信 提问
泥沙砖瓦浆木匠/java-core-learning-example

感谢赞助的ta们 Java 核心系列教程,关于Java核心技术学习积累的例子,是初学者及核心技术巩固的最佳实践。 包括基础语法,OOP,字符串,集合,IO,反射,线程,网络等。 未完成模块:阿里J...

泥沙砖瓦浆木匠
04/02
0
0
加强Docker容器与Java 10集成

很多运行在Java虚拟机(JVM)中的应用,包括数据服务如Apache Spark和Kafka以及传统企业应用,都运行在容器中。最近,运行在容器里的JVM出现了由于内存和CPU资源限制和使用率导致性能损失问题...

java高级架构牛人
2018/06/04
25
0
Java 在 2018 的关键字:Eclipse 之年,容器和无服务器

现在,Java EE 已经是 Eclipse 基金会的一个项目;甲骨文也加快了 Java SE 的发布频率,最重要的是通过 Java 模块化系统(Java Platform Module System),即大家熟知的 Jigsaw,Java 的模块化...

局长
2018/02/16
2.3K
1
severlet容器中的JNDI引发的思考

最近一个小朋友,问了我一个急剧郁闷的问题,java平台开发的一个问卷调查系统,源代码是基于SQLSERVER2000的,现在换成2005怎么弄,还把代码传过来让我帮忙改,我拒绝,这需要改代码吗?200...

邹建芳
2013/06/05
334
1
容器中 Java 应用程序的内存和 CPU 如何分配?看这一篇就够了!

出品丨Docker公司(ID:docker-cn) 编译丨小东 每周一、三、五,与您不见不散! 随着2018年的结束,我们将回顾排名前五的最受读者欢迎的文章。今天分享的第一篇文章,将帮助那些在容器中运行...

docker公司
01/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

c++ 内联函数调用快的原因

见图片分析

天王盖地虎626
47分钟前
4
0
JS--function

一、声明提前(hoist) 在js程序开始执行前,引擎会查找所有var声明的变量和function声明的函数,集中到当前作用域顶部集中创建,赋值留在原地 二、三种创建函数的方式 1、声明方式创建函数-...

wytao1995
今天
5
0
微服务之间调用控制器注解类型的差异

今天在一个业务服务通过Feign调用文件服务上传文件时遇到了几个问题: 1. 提示http请求头过大的问题; 此时需要修改bootstrap.yml,加入 server: max-http-header-size: 10000000 用以放大...

不再熬夜
今天
7
0
用 4G 工作是什么体验

七月开始,因为工作原因,在公司附近租了个住处,方便工作。离公司近了,感觉就是不一样,之前每天 5:30 就要起床赶地铁,现在可以睡到自然醒,一看才 7 点,悠闲的起床洗漱,踱步到公司,都...

zzxworld
今天
6
0
sonar报错volatile

问题发生 原先代码如下: //认证授权码private static volatile String AUTHORIZATION_CODE = "init"; git push 之后,sonar认为这是个bug检测报告截图如下: 分析排查 解释说明: Markin...

开源小菜鸟2333
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部