Java中List、Set和Map等集合总结和介绍

package hing.test.collection;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.EnumMap;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.Vector;

import org.junit.Test;

public class TestCollection {
	
	@Test
	public void testCollection(){
//		Collection接口是List,Set和Queue接口的父接口
		/**
		 * Collection接口定义的操作集合的方法:
		 * 
		 * boolean add(Object o);
		 * boolean addAll(Collection c);
		 * void clear();
		 * boolean contains(Object o);
		 * boolean contains(Collection c);
		 * boolean isEmpty();
		 * Iterator iterator();
		 * boolean remove(Object o);
		 * boolean removeAll(Collection c);
		 * boolean retaionAll(Collection c);
		 * int size();
		 * Object[] toArray();
		 */
	}
	
	/**
	 * List代表有序,可重复的集合。
	 * Vector因为是线程安全的,所以性能比ArrayList低。
	 */
	
	@Test
	public void testArrayList(){
		
		/**
		 * ArrayList是基于数组实现的List类,是线程不安全的,需要手动保证该集合的同步性。
		 */
		List<String> list = new ArrayList<String>();
		
		list.add("北京");
		list.add("上海");
		list.add("天津");
		list.add("重庆");
		
		for(String s : list){
			System.out.println(s);
		}
		
		System.out.println(list.toString());
		
	}
	
	@Test
	public void testLinkedList(){
		
		/**
		 * LinkedList对于顺序访问集合中的元素的速度非常快,特别是插入和删除排第一,在List中。
		 */
		List<String> list = new LinkedList<String>();
		
		list.add("北京");
		list.add("上海");
		list.add("天津");
		list.add("重庆");
		
		for(String s : list){
			System.out.println(s);
		}
		
		System.out.println(list.toString());
		
	}
	
	@Test
	public void testVector(){
		
		/**
		 * Vector是基于数组实现的List类,是线程安全的。但不建议使用!
		 */
		List<String> list = new Vector<String>();

		list.add("北京");
		list.add("上海");
		list.add("天津");
		list.add("重庆");
		
		for(String s : list){
			System.out.println(s);
		}
		
		System.out.println(list.toString());
	}
	
	/**
	 * Set代表无序,不可重复的集合。
	 * HashSet和TreeSet是Set的两个典型实现。但HashSet的性能总是比Tree好,特别是常用的添加和查询元素。
	 * EnumSet是所有Set实现类中性能最好的,但它只能保存同一个枚举类的枚举值作为集合元素。
	 */
	
	@Test
	public void testHashSet(){
		
		/**
		 * HashSet按Hash算法来存储集合中的元素,因此具有很好的存储和查找性能
		 * 1.不能保证元素的排序顺序,顺序有可能发生变化。
		 * 2.HashSet不是同步的。
		 * 3.集合的值可以是null。
		 */
		Set<String> set = new HashSet<String>();
		
		set.add("北京");
		set.add("上海");
		set.add("天津");
		set.add("重庆");
		Iterator<String> i = set.iterator();
		
		while(i.hasNext()){
			String str = i.next();
			if(str.equals("重庆")){
				i.remove();
			}
		}
		
		for(String s : set){
			System.out.println(s);
		}
	}
	
	@Test
	public void testLinkedHashSet(){
		
		/**
		 * LinkedHashSet是HashSet的子类,它也是根据元素的hashCode值来决定元素的存储位置,
		 * 但它同时使用链表维护元素的次序,这样使得元素看起来是以插入的顺序保存的。因此性能上略低于HashSet。
		 */
		Set<String> set = new LinkedHashSet<String>();
		
		set.add("北京");
		set.add("上海");
		set.add("天津");
		set.add("重庆");
		
		Iterator<String> i = set.iterator();
		
		while(i.hasNext()){
			System.out.println(i.next());
		}
	}
	
	@Test
	public void testTreeSet(){
		
		/**
		 * TreeSet是SortedSet接口的实现类,可以确保集合元素处于排序状态。
		 * 如果在定义TreeSet时,不定义Comparator(),集合会调用集合元素的CompareTo(Object o)
		 * 与HashSet集合相比,TreeSet还提供了如下几个额外方法:
		 * Object first();
		 * Object last();
		 * Object lower(Object o);
		 * Object higher(Object o);
		 * SortedSet subSet(fromElement,toElement);
		 * SortedSet headSet(toElement);
		 * SortedSet tailSet(fromElement);
		 */
		Set<User> set = new TreeSet<User>(
				new Comparator() {
			public int compare(Object o1,Object o2){
				User u1 = (User)o1;
				User u2 = (User)o2;
				return u1.age > u2.age ? -1 : u1.age < u2.age ? 1 : 0;
			}
		});
		
		set.add(new User("hing01",20));
		set.add(new User("hing02",25));
		set.add(new User("hing03",23));
		set.add(new User("hing04",21));
		set.add(new User("hing05",26));
		
		Iterator<User> i = set.iterator();
		
		while(i.hasNext()){
			System.out.println(i.next().toString());
		}
		
	}
	
	class User{
		
		public User(String name ,int age){
			this.name = name;
			this.age = age;
		}
		
		String name;
		int age;
		
		public String toString(){
			return this.name +":"+this.age;
		}
	}
	
	enum Season{
		SPRING,SUMMER,FALL,WINTER
	}
	
	@Test
	public void testEnumSet(){
		
		/**
		 * EnumSet是一个专门为枚举类设计的集合类,它在内部以位向量的形式存储,
		 * 因此EnumSet对象占用内存很小,而且运行效率很好。
		 */
		Set<Season> set = EnumSet.allOf(Season.class);
		//输出[SPRING, SUMMER, FALL, WINTER]
		System.out.println(set.toString());
		//创建一个EnumSet空集合
		Set<Season> setNull = EnumSet.noneOf(Season.class);
		
	}
	
	/**
	 * Map<key,value>用于保存具有映射关系的数据。key不允许重复
	 * HashMap和Hashtable都是Map典型的实现类,不能保证存储顺序,它们之间的关系完全类似于A仍然有List和Vertor的关系。
	 * 
	 */
	
	@Test
	public void testHashMap(){
		
		/**
		 * HashMap是线程不安全的,可以使用null作为key或value。
		 */
		Map<String, String> map = new HashMap<String, String>();
		map.put("1", "一");
		map.put("2", "二");
		map.put("3", "三");
		map.put("4", "四");
		
		System.out.println(map);
		
	}
	
	@Test
	public void testLinkedHashMap(){
		
		/**
		 * LinkedHashMap是HashMap的子类,可保证存入顺序和输出顺序一致,所以性能略低于HashMap。
		 */
		Map<String, String> map = new LinkedHashMap<String, String>();
		map.put("1", "一");
		map.put("2", "二");
		map.put("3", "三");
		map.put("4", "四");
		
		System.out.println(map);
		
	}
	
	@Test
	public void testHashtable(){
		
		/**
		 * Hashtable是线程安全的,但不可以使用null作为key或value。
		 */
		Map<String, String> map = new Hashtable<String, String>();
		map.put("1", "一");
		map.put("2", "二");
		map.put("3", "三");
		map.put("4", "四");
		
		System.out.println(map);
		
	}
	
	@Test
	public void testTreeMap(){
		
		/**
		 * TreeMap可类比TreeSet
		 */
		Map<String, String> map = new TreeMap<String, String>();
		map.put("1", "一");
		map.put("2", "二");
		map.put("3", "三");
		map.put("4", "四");
		
		System.out.println(map);
		
	}
	
	@Test
	public void testEnumMap(){
		
		Map<Season, String> map = new EnumMap<Season, String>(Season.class);
		
		map.put(Season.SPRING, "春暖花开");
		map.put(Season.SUMMER, "夏日炎炎");
		map.put(Season.FALL, "秋高气爽");
		map.put(Season.WINTER, "万里冰封");
		
		System.out.println(map);
		
	}
	
	/**
	 * Collections是java提供的一个操作Set、List和Map等集合的工具类。
	 * 它提供了很多的方法:排序、查找、替换和同步控制等操作,
	 * 有兴趣的自己钻研一下,这里不列举了。。。
	 */
	@Test
	public void testCollections(){
		
	}
	
	
	
	
	

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值