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的实现类。

  ArrayList Vector
推出时间 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下的类,是针对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、

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

猜你喜欢

转载自java1010.iteye.com/blog/2404214