Java Set,HashSet,TreeSet,LinkedHashSet用法

package com.asse.ljb;

import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;

/**
 * 1.set集合不允许添加相同的元素
 * 2.使用equals(),比较set是否相同
 * 3.HashSet 是 Set 接口的典型实现类,大多数时候使用 Set 集合时都使用这个实现类。
 * 4.HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取和查找性能。
 * 5.HashSet 具有以下特点:
 *		不能保证元素的排列顺序
 *		HashSet 不是线程安全的
 *		集合元素可以使用 null
 */
public class SetTest {
	public static void main(String[] args) {
		System.out.println("------Set用法--------");
		Set set = new HashSet();
		set.add("abc");
		set.add(123);
		set.add(456);
		System.out.println("重复加入123:" + set.add(123));//添加重复元素时为false,不能添加
		System.out.println("输出所有元素");
		for (Object o : set) {//foreach输出所有元素
			System.out.println(o);
		}
		Set set2 = new HashSet();
		set2.add(123);
		set2.add("abc");
		set2.add(456);
		System.out.println("==方法判断相等是不对的:" + (set == set2));//此方法不对
		System.out.println("equals()方法判断set,set2是否相同:" + set.equals(set2));//判断set,set2是否相同
		System.out.println("添加null:" + set2.add(null));//集合元素可以null
		for (Object object : set2) {
			System.out.println(object);
		}
		System.out.println("--------------");
		//hashset用法
		System.out.println("---hashset用法------------");
		HashSet hs = new HashSet();
		hs.add(123);
		hs.add("abc");
		System.out.println("hs hashcode:" + hs.hashCode());//哈希码值
		HashSet hs2 = new HashSet();
		hs2.add(123);
		hs2.add("abc");
		System.out.println("hs2 hashcode:" + hs2.hashCode());//哈希码值
		System.out.println("hs.equals(hs2):" + hs.equals(hs2));//两个hashset对象是否相同
		System.out.println();
		System.out.println("hs add null");
		hs.add(null);//hashset可以储存null
		System.out.println("hs hashcode:" + hs.hashCode());
		System.out.println("hs2 hashcode:" + hs2.hashCode());
		System.out.println("hs.equals(hs2):" + hs.equals(hs2));
		System.out.println("输出hs");
		hs.add("cde");
		hs.add("123");
		for (Object object : hs) {
			System.out.println(object);
		}
		/**
		 * TreeSet用法
		 * 1.TreeSet 是 SortedSet 接口的实现类,TreeSet 可以确保集合元素处于排序状态。
		 * 2.按大小排序储存
		 * 3.
		 */
		System.out.println("-------TreeSet用法---------");
		TreeSet ts = new TreeSet();
		ts.add("abc");
		ts.add("cde");
		ts.add("efg");
		ts.add("aac");
		ts.add("xyz");
		System.out.println("按大小有顺序输出");
		for (Object object : ts) {//输出是有顺序的
			System.out.println(object);
		}
		System.out.println("输出第一个元素  :" + ts.first());
		System.out.println("输出最后一个元素:" + ts.last());
		System.out.println("输出比abc大一个的元素:" + ts.lower("abc"));
		System.out.println("输出比abc小一个的元素:" + ts.higher("abc"));
		System.out.println("----headSet------");
		System.out.println("输出cde的头部(不包括cde)及cde前面的元素");
		for (Object object : ts.headSet("cde")) {
			System.out.println(object);
		}
		System.out.println("-------tailSet--------");
		System.out.println("输出cde的尾部(包括cde)及cde后面的元素");
		for (Object object : ts.tailSet("cde")) {
			System.out.println(object);
		}
		/**
		 * LinkedHashSet用法
		 * 1. LinkedHashSet 是 HashSet 的子类
		 * 2.LinkedHashSet 集合根据元素的 hashCode 值来决定元素的存储位置
		 *   但它同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的。
		 * 3. LinkedHashSet 性能插入性能略低于 HashSet
		 *    但在迭代访问 Set 里的全部元素时有很好的性能。
		 * 4.LinkedHashSet 不允许集合元素重复。
		 */
		System.out.println("-------LinkedHashSet用法------------");
		LinkedHashSet lhs = new LinkedHashSet();
		lhs.add("abc");
		lhs.add("123");
		lhs.add("cde");
		System.out.println("按插入的顺序输出");
		for (Object object : lhs) {//输出顺序是插入顺序
			System.out.println(object);
		}
		System.out.println("再次添加123:" + lhs.add("123"));
		LinkedHashSet<Car> lhsEmp = new LinkedHashSet<Car>();
		lhsEmp.add(new Car("stn"));
		lhsEmp.add(new Car("dz"));
		lhsEmp.add(new Car("lsls"));
	}
}
class Car{
	String name;
	public Car(String name) {
		this.name = name;
	}
}






上一篇:LinkedHashSet介绍


下一篇:清华学长免费分享Java基础核心知识大总结(1)