java集合

Java集合详解
本文详细解析了Java中List、Map和Set等集合类的原理及差异,包括ArrayList、LinkedList、HashMap、TreeMap等的具体实现特点,并对比了array与ArrayList的区别。

Java中集合的原理以及差别

java中的集合类实现collection接口,collection接口继承iterator。

collections是对集合操作的一个工具类。

List集合

ArrayList:继承AbstractArrayList类,是一个对象数据,达到上限时扩大到当前的1.5倍。线程不安全。

LinkedList:是一个双向列表,header的前驱表为最后一个元素,后驱表为第一个元素。新增和删除数据快,查询数据慢。

Vector:继承AbstractArrayList类,是一个对象数组,有同步锁,线程安全。初始大小为10。类似于ArrayList。超过大小,增加                 为原来的2倍。

 

map集合

Hash Map:通过key的hashCode和key的hashCode右移16位的异或运算获得hashCode;是一个数组列表。hashCode()方法,                       是将迭代器遍历过程中所有经过的node的hashCode()相加,node中hash()的计算方法为key的hashCode异或value                       的hashCode。

HashTable:类似于hashMap,是线程安全的。key和value不能为null。当数据量变大时,ConcurrentHashMap效率更高,因为                        Hashtable锁定整个Map,而ConcurrentHashMap采用分割(锁定当前正在使用的对象),只锁定部分Map。(扩                        展:hashMap不能存放null是因为他是线程安全的,查询过程中不知道是因为没有key为空还是value本来就是空,                        containsKey()方法调用查询是否存在key时,可能map已经被修改。

TreeMap:是一个红黑树。是有序的。排序快。hashMap在插入,删除和定位数据更快。

set集合

HashSet:是基于hashMap实现,hashCode取所有对象的HashCode值相加。equals方法比较集合中是否包含key。hashMap需                    要比较key和value。

LinkedHashSet:继承HashSet,无特别重写方法。


array和ArrayList的区别:array是一个数组,array的长度是固定的,只能存储同一类型数据。arrayList是一个动态数据,长度是可变的,不指定泛型的情况下,可以存储任何类型数据。

将集合设置为不可修改:使用Collections的unmodifiedXXX()方法。

Collections中的SynchronizedXXX()方法可以将不是线程安全的集合转化为线程安全的集合。代理原有的方法加入同步锁,属于静态代理。

iterator是一个提供迭代遍历集合方法的接口。

iterator可以在遍历过程中对集合进行修改,但是删除数据可能会导致遍历丢失数据。next()通过游标返回下一个元素。不过只能重头遍历。for遍历性能最好,iterator次之,foreach最差。

iterator和listIterator:listIterator只有list集合拥有,且在执行过程中可以向list中增加数据,可以实现向前(previous()方法)和向后遍历,可以定位当前索引的位置nextIndex()和previousIndex()。iterator所有对象都有,执行过程中不能增加元素,只能向后遍历,无法定位索引位置。都可以实现对元素的删除和修改。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值