Java集合剖析

集合在Java语言开发过程中应该是必须会用的最基本的东西了,在此记录一下关于集合的部分知识。

一、集合和数组的区别

数组和集合的区别
比较内容数组集合
长度长度固定长度可变,动态添加减少很方便
内容单一固定可存放Object任意对象
操作通过数组下标来访问数组

获取内容的方式比较灵活,如果Map中通过key值来获取

 

二、Java中的集合架构图:



 

Collection:单列集合。

 List:有序集合。(有序、有索引、可重复)

Set:无序集合,不能通过索引获取元素内容,元素内容不能重复。(无序、无索引、无重复)。

 Map:双列集合。

 

三、List和Set:

List和Set都是Collection的子接口,都是单列集合。

List是有顺序、有索引的,List内的元素内容可重复(有序、有索引、可重复)。索引值从0开始。

List可以通过get(索引值)的方式获取元素内容。

 

四、ArrayList和LinkedList:

ArrayList的底层结构是数组,因此插入或删除数据较慢,查询数据较快。

LinkedList的底层结构是链表,因此插入或删除数据较快,查询速度较慢。

总结:如果要经常对数据进行查询搜索操作,则使用ArrayList比较合适;

           如果需要频繁的插入或删除数据,则使用LinkedList比较合适。

 

五、ArrayList与Vector:

      两者都是List的实现类。

 ArrayListVector
推出时间JDK1.2后出现,属于较新的类JDK1.0就有,比较古老
性能采用异步处理方式,存取值的效率较高采用同步处理方式,存取值的效率较低
安全性属于非线程安全的操作类属于线程安全的操作类
数据增长当需要增长时,ArrayList增长原来的一半Vector默认增长为原来的一倍

 

六、HashSet和TreeSet:

HashSet:底层是哈希表,线程不同步、无序、高效。

1、保证元素的唯一性:通过元素的hashCode和equals方法。若hashCode值相同,则会判断equals的结果

     是否为true;hashCode值不同,不会调用equals方法。

2、LinkedHashSet:有序的,是HashSet的子类。

TreeSet:底层是二叉树,可对元素进行排序,默认是自然顺序。

List的有序是针对元素的存放顺序,存放元素时是什么顺序,取出数据时也是什么顺序。

TreeSet的有序是对存储的元素进行自然排序,并不一定是存放时的顺序,与存放顺序无关。

 

 七、List删除元素注意事项:

        在List中去除重复元素,如果采用从前往后的方式删除,则后面的元素会往前面移动,相应的元素可能

       无法删除。

        因此:如果要删除List中的元素,建议一般从后往前删除。

 

八、Map:

       Map中存放的元素是以Key-value(键值对)的形式存放,存放是没有顺序的。

       Map中的Key是不允许重复的,但Value可以重复。Key和Value均可以为null。

 

九、HashMap和Hashtable:

       1、HashMap是非线程安全的,Key和Vlaue均可以就受null值。存取值速度较快。

       2、Hashtable是线程安全的。不接受null值。存取值速度较慢。

      

十、Collection和Collections的区别:

       Collection是java.util下的接口,它是各种集合的父接口,继承于它的接口主要有List和Set。

       Collections是java.util下的类,是针对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、

       排序、线程安全化等操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值