java集合类总结
来源:互联网 发布:贵州广电网络网上缴费 编辑:程序博客网 时间:2024/06/07 17:46
Java集合类提供了一套设计良好的支持对一组对象进行操作的接口和类。Java集合类里面最基本的接口有:
● Collection:代表一组对象,每一个对象都是它的子元素。
● Set:不包含重复元素的Collection。
● List:有顺序的collection,并且可以包含重复元素。
● Map:可以把键(key)映射到值(value)的对象,键不能重复。
entrySet实现了Set接口,里面存放的是键值对,可以通过map.entrySet()得到
尔后可以通过Iterator遍历 Iterator iterator = filemap.entrySet().iterator();
Iterator可用来遍历Set和List集合,主要包含 hashNext(),next(),remove()三种方法。
通常无序集合实现的都是这个接口,比如HashSet,HashMap;而那些元素有序的集合,实现的一般都是 ListIterator接口,实现这个接口的集合可以双向遍历,既可以通过next()访问下一个元素,又可以通过previous()访问前一个 元素,比如ArrayList。
数组(Array)和列表(ArrayList) 区别:
● Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。
● Array大小是固定的,ArrayList的大小是动态变化的。
● ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
● 对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。
ArrayList、LinkedList与Vector 区别:
|–ArrayList:基于索引的数据接口,底层数据结构是 数组结构.是线程不同步的(不安全的).查询速度很快,可以以O(1)时间复杂度对元素进行随机访问,但是增删较慢。
构造一个初始容量为 10 的空列表,当放满了10个元素后,以50%的长度加长集合容器的长度。
List 接口的大小可变数组的实现,即:可以直接指定容量大小
|–LinkedList:底层数据结构是 链表结构。对元素的增删速度很快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。但是查询速度很慢,查找某个元素的时间复杂度是O(n)。线程是不同步的。LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。
|–Vector:底层数据结构也是数组结构,是线程同步的(安全的),效率低,被ArrayList替代了。1.2版本以后的集合都是不同步的
当放满了10个元素后,以100%的长度加长集合容器的长度。
当更多的元素被添加的时候,Vector和ArrayList需要更多的空间。Vector每次扩容会增加一倍的空间,而ArrayList增加50%。
HashMap
HashMap 是一个数组和链表的结合体(在数据结构中,一般称之为“链表散列“),其数组元素为entry类型。
数据结构图如下:
put元素时的操作顺序为:
1、根据key计算hashcode值 2、根据hashcode映射内存地址 3、根据内存地址取值
基于HashMap的这种实现机制,只要hashCode()和hash()方法实现的足够好,能够尽可能的减少冲突的产生,那么对HashMap的操作几乎等价于对数组的随机访问操作,具有很好的性能。但是,如果hashCode()或者hash()方法实现较差,在大量冲突产生的情况下,HashMap事实上就退化为几个链表,对HashMap的操作等价于遍历链表,此时性能很差。
当我们往hashmap中put元素【按位与运算(indexFor)】的时候,先根据key的hash值得到这个元素在数组中的位置(即下标),然后就可以把这个元素放到对应的位置中了。如果这个元素所在的位子上已经存放有其他元素了,那么在同一个位子上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾。从hashmap中get元素时,首先计算key的hashcode,找到数组中对应位置的某一元素,然后通过key的equals方法在对应位置的链表中找到需要的元素。从这里我们可以想象得到,如果每个位置上的链表只有一个元素,那么hashmap的get效率将是最高的,但是理想总是美好的,现实总是有困难需要我们去克服,哈哈~
但如果增大size,则hashcode取余范围增大,冲突几率变小。且map的size大小一般为2的方次数,如此则按位与时为&111111……..
HashMap和Hashtable区别:
● HashMap和Hashtable都实现了Map接口
● HashMap允许键和值是null,而Hashtable不允许键或者值是null。
● Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。
● HashMap提供了可供应用迭代的键的集合,因此,HashMap是快速失败的。另一方面,Hashtable提供了对键的列举(Enumeration)。
○ 一般认为Hashtable是一个遗留的类。
- java集合类总结
- java集合类总结
- JAVA集合类总结
- java集合类总结
- java集合类总结
- java集合类总结
- JAVA集合类总结
- java集合类总结
- JAVA集合类总结
- java集合类总结
- java集合类总结
- java集合类总结
- java集合类总结
- java集合类总结
- JAVA集合类总结
- java集合类总结
- Java集合类总结
- java集合类总结
- inno setup compiler 汉化文件
- 关于Spring核心原理Aop的几种实现方式
- Brandon的IT简史——Apple(苹果公司)
- Python赋值、浅拷贝、深拷贝
- Windows下使用VisualSVN Server搭建SVN服务器
- java集合类总结
- java 继承的执行顺序
- 在Centos6.9上快速搭建基于Beego和Swagger的RESTful API
- 微信小程序开发(3)---Page()函数
- 图片帮助类—ImageHelper
- ios-发动态的图片的动画实现技巧
- Spring和MyBatis环境整合
- 用supervisor+nginx部署服务的流程
- Java8 Lambda表达式 函数式编程 方法引用