通常所说的集合类型主要有3种:set(集)、list(列表)和map(映射)。如图所示,
一、Collection接口
Collection是最基本的集合接口。Collection的下属结构如图所示,由Collection的接口派生的子接口有List和Set。
Collection支持迭代器操作,进行查询。
Iterator iter = collection.iterator(); // 获得一个迭代子 while(iter.hasNext()) { // 判断当有下一个元素时 Object obj = iter.next(); // 得到下一个元素 }
List (定义了一个允许元素重复的有序列表。并且提供了特殊的迭代器ListIterator,不仅可以实现查询操作,还可实现插入和删除操作,以及双向访问。) LinkedList (链表,不是基于Array的LIst,适合做添加和删除操作,因为不涉及到元素的移动)ArrayList (基于Array的List,不同步的,性能优于Vector,适合做查询操作)Vector (基于Array的List,同步synchronized,线程安全,是旧的历史集合类。) List<String> list = new LinkedList<String>() ; for (int i = 0; i <= 5; i++) { list.add("a"+i) ; } System.out.println("集合 list="+list); Collections.shuffle(list); // 随机排列 System.out.println("随机排列 list="+list); Collections.sort(list); // 排序 System.out.println("排序后 list="+list); Collections.reverse(list); // 逆序排列 System.out.println("逆序排列 list="+list); System.out.println("二分查找有序集合方式a3的位置为 "+Collections.binarySearch(list, "a3")); // 二分查找Result为:
Set(表示数学意义上的集合的概念,不包含重复元素,即不存在两个对象a.equals(b)为true的情况。set集合本身是无序的。) TreeSet (可以实现从set中有序的取出元素)HashSet(在集合中存储效率高,但需要添加到 HashSet 的对象需要采用恰当分配散列码的方式来实现hashCode() 方法。) 1 package javaBasic; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 import java.util.TreeSet; 6 7 public class SetExample 8 { 9 public static void main(String[] args) { 10 Set<String> set = new HashSet<String>() ; 11 set.add("ZhangSan") ; 12 set.add("LiSi") ; 13 set.add("Wyao") ; 14 set.add("ZhaoLiu") ; 15 set.add("Wyao") ; 16 17 System.out.println(set) ; 18 19 Set<String> treeSet = new TreeSet<String>(set) ; 20 System.out.println(treeSet); 21 } 22 }
Result:
由结果可知,重复元素“Wyao”只出现了一次,并且使用TreeSet进行排序之后输出为有序,按照字母先后顺序排序。
二、Map接口
1. Map 接口不是 Collection 接口的继承。提供了键Key到值Value的映射。键是唯一的,不允许重复,但是值可以有多值,用逗号隔开,可以重复。
Map(key-value 映射)
— HashMap (在Map 中插入、删除和定位元素,HashMap 是最好的选择。HashMap允许null值作为key和value。不同步的,采用快速失败机制,因此效率更高。)
— Hashtable (是原始集合类之一,也称作遗留类。而Hashtable不可以null值作为key和value。同步的,)
— WeakHashMap
2. TreeMap与HashMap的比较
Map有两种常见的实现方式:HashMap和TreeMap。根据需要决定要使用哪种方式。其中,HashMap采用快速失败机制,在Map中插入、删除、查询元素较快。若是按顺序遍历键Key,则采用TreeMap方式
会更快。使用HashMap 要求添加的键类明确定义了 hashCode() 实现。有了TreeMap 实现,添加到映射的元素一定是可排序的。
部分内容参考http://blog.csdn.net/u014136713/article/details/52089156
转载于:https://www.cnblogs.com/Wyao/p/7098109.html