首页 > 代码库 > Java之集合1

Java之集合1

 

  通常所说的集合类型主要有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

Java之集合1