Table of Contents
HashSet
TreeSet:
自然排序
定制排序
List与ArrayList
ArrayList和Vector
Map
HashMap 与 Hashtable
TreeMap
Collections操作集合的工具类
集合类存放在java.util包中,是一个用来存放对象的容器。
java集合可分为Set、List和Map三种大体系:
在JDK5之后,增加了泛型,Java集合可以记住容器中对象的数据类型。
HashSet是Set接口的典型实现,大多数时候使用Set集合时都是使用这个实现类。
HashSet按Hash算法来存储集合张的元素,因此具有很好的存取和查找性能。
HashSet具有以下特性:
当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据hashCode值决定该对象在HashSet中存储位置。
如果两个元素的equals()方法返回true,但他们的hashCode()返回值不相等,hashSet将会把它们存储在不同的位置,但依然可以添加成功。
泛型:
如果想让集合只能存同样类型的对象,使用泛型。例如 Set
而 Set set = new HashSet(); 可以存不同类型的对象。
TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方法:自然排序和定制排序。默认情况下,TreeSet采用自然排序。
TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按升序排列:
如果需要实现定制排序,则需要在创建TreeSet集合对象时,提供一个Comparator接口的实现类对象。由该Comparator对象负责集合元素的排序逻辑。
List代表一个元素有序且可重复的集合,集合中的每个元素都有其对应的顺序索引。
List允许使用重复元素,可以通过索引来访问指定位置的集合的元素。
List默认按元素的添加顺序设置元素的索引。
List集合里添加了一些根据索引来操作集合元素的方法。
ArrayList和Vector时List接口的两个典型实现。
区别:
Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的Key,另外一组用于保存Map里的Value.
Map中的key和value都可以是任何引用类型的数据
Map中的key不允许重复,即同一个Map对象的任何两个Key通过equals方法比较返回false
Key和Value之间存在单向一对一关系,即通过指定的Key总能找到唯一的,确定的Value。
HashMap是堆Map接口的经典实现。
HashMap和Hashtable是Map接口的两个典型实现类。
区别:
与HashSet集合不能保证元素的顺序一样,Hashtable和HashMap也不能保证其中key-value对的顺序。
Hashtable、HashMap判断两个key相等的标准是:两个key通过equals方法返回true,hashCode值也相等。
Hashtable相等的标准是:两个value通过equalHashMap判断两个Values方法返回true。
TreeMap存储key-value时,需要根据key对key-value对进行排序。TreeMap可以保证所有的key-value对处于有序状态。
TreeMap的key的排序:
Collections时一个操作Set、List和Map等集合的工具类
Collections中提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制方法
排序操作:
Collections类中提供了多个synchronizedXxx()方法,该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题。