java之Set、List、Map各个集合的总结

5 篇文章 0 订阅

集合的总结

List:有序,可以重复,线程不安全,实现了collection接口

LinkedLIst:实现原理是使用的双向列表;常用的方法有:

add(),列表后边追加元素

size(),数组存放元素的的个数

clear(),清空列表

remove():删除列表首个指定元素

isEmpty():列表中是否包含指定元素,返回Boolean值

 

ArrayList:实现使用的是动态数组,常用的方法有:

add(),列表后边追加元素

size(),数组存放元素的的个数

clear(),清空列表

remove():删除列表首个指定元素

isEmpty():列表中是否包含指定元素,返回Boolean值

vactor

vactor底层的数据结构也是数组存放,除了在线程安全问题上相对于ArrayList更安全,其余几乎一样,他在添加,访问过程中添加了同步锁,线程更安全。

 

Set:无序,不可以重复,线程不安全,

HashSet:底层是哈希表
哈希表唯一依赖两个方法:hashCode(),equals();
向HashSet集合中放入新元素的执行顺序:
1、调用Hashcode()函数,看是否已经有相同的哈希值
2、如果没有则放入该新元素,如果有则调用equals()函数逐个比对,如果没有,则放入,如果有,则不执行添加元素操作。

TreeSet:底层是红黑树,自然平衡二叉树(

二叉树红黑树,存储规则,左小右大,根节点最多为2

),因为是二叉树结构所以集合内元素自动按升序排列(升序是其最大特征)。
元素不可重复
TreeSet是对Set集合的实现,而Set集合都是不可重复的
TreeSet自动排序,添加元素时会调用compareTo(Object obj)方法,遇到重复不添加元素
有两种排序方法:自然排序(默认升序)和定制排序。

常用方法:

增:add();add(int,null);

删:remove();

改:set();

查:for()增强和普通,以及迭代器iterator

iterator.hasNext() ; //判断迭代器是否还有下一个元素;

iterator.next();//返回指针指的当前的元素;并且把指针往下移动一个单位;

for(Iterator it = list.iterator(); it.hasNext() ; System.out.println(obj)) {

obj = it.next();

}//迭代器的两种方法

for(Iterator it = list.iterator(); it.hasNext() ; System.out.println(it.next())) {

}

Map:使用键值对方式(key, value),key不允许重复,存储原理使用的是双向列表加红黑树

HashMap:底层是哈希表(哈希表的本质是数组+链表)
把它的键套用HashSet的规则即可,只是每个键都附带了其各自的值。key值允许为null,不可以重复。线程不安全。

TreeMap;底层是红黑树,自然平衡二叉树
其键的存储类似于TreeSet,只是每个键都附带了其各自的值(value)。key值不可以不null ,不允许重复。线程不安全。

HashTable:底层是哈希表(哈希表的本质是数组+链表),十分类似于HashMap,线程安全
与HashMap唯一区别:Hashtable线程安全,效率低,不允许null键null值
HashMap线程不安全,效率高,允许null键null值

 

常用的方法有:

get();集合取元素

put();元素添加到集合

size();集合大小

clean();清空集合

isEmpty():是否包含元素返回Boolean值。

HashMap是线程不安全的,HashMap是一个实现类,是将键映射到值得到对象,不允许键值重复,允许空键和空值;由于非线程安全,HashMap的效率要比hashTable要高;若添加 key 相同的键值对,后面的 value 会自动覆盖前面的 value,但不会报错。
HashTable是线程安全的一个集合,不允许null值作为一个key值或value值;
HashTable是sychronize多个线程访问时不需要自己为它的方法实现同步而hashMap在被多个线程访问的时候需要自己为它的方法实现同步

 

 

Map jdk1.8以前哈希碰撞后,会替换键值,指向旧元素,超过8会变成红黑树,删除到6会变成列表;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值