集合在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下的类,是针对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、
排序、线程安全化等操作。