Java集合(Set集合)

Set接口

特点:无序,值不唯一(不允许重复)

Set接口并不保证有序,而Sortedset接口则保证元素是有序的:
HashSet是无序的,因为它实现了Set接口,并没有实现Sortedset接口;
Treeset是有序的,因为它实现了Sortedset接口.

 

具体实现类:

HashSet类:无序,值唯一

LinkedHashSet:有序,值唯一

TreeSet:自动排序,值唯一

HashSet类

HashSet集合:该集合特点是无序唯一,输出的顺序既不是添加的顺序,也不是string排
序的顺序。

 

package com.xn.ffri;

import java.util.Arrays;
import java.util.HashSet;

public class Fri01 {
	public static void main(String[] args) {
		HashSet set=new HashSet();
		//添加新元素
		//特征1:不允许重复元素,如果重复元素存在,则返回false
		boolean isadd1=set.add("1小乔");
		System.out.println(isadd1);
		
		boolean isadd2=set.add("2大乔");
		System.out.println(isadd2);
		
		boolean isadd3=set.add("2大乔");
		System.out.println(isadd3);
		//特征2:无序
		set.addAll(Arrays.asList("3周瑜","4曹操","5吕布","张飞"));
		System.out.println(set);
		
		//哈希冲突
		System.out.println("通话".hashCode());
		System.out.println("重地".hashCode());
		
		//通过当前保存的数据,计算哈希值
		//然后通过哈希值计算在哈希表中的下标
		String item="诸葛亮";
		int hashCode=item.hashCode();
		System.out.println("哈希值:"+hashCode);
		System.out.println("下标值:"+hashCode%16);
		
	}
}

 

package com.xn.ffri;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;

public class Fri02 {
	public static void main(String[] args) {
		HashSet set = new HashSet();
		set.addAll(Arrays.asList("1小乔","2蔡文姬","3周瑜","4曹操","5吕布","6张飞"));
		//基于“迭代器”方式遍历Set
		//迭代器:遍历对应的集合

		Iterator it=set.iterator();
		while(it.hasNext()) {
			String item=it.next();
			System.out.println(item);
		}
		
		
		//foreach:迭代器方式的语法简化
		for(String name:set) {
			System.out.println(name);
		}
	}
}

LinkedHashSet类

package com.xn.ffri;

import java.util.Comparator;
import java.util.TreeSet;

public class Fri04 {
	public static void main(String[] args) {
		//一个包含重复字符串的数组
		String[] ans = {"ABC","AB","ABCD","A","DEF","BCD","AC","BCD","ABCDE","B","AD","A","BCD","ABCD"};
		//需求1:过滤重复字符串
		//需求2:自动排序(先按长度再按内容)
		//构造方法:允许传入一个Comparator接口的比较器
		TreeSet set=new TreeSet(new Comparator() {
			@Override
			public int compare(String o1, String o2) {
				//按照长度
				if(o1.length()!=o2.length()) {
					return o1.length()-o2.length();
					//按照内容
				}else {
					return o1.compareTo(o2);
				}
				
			}
		});
		for(String s:ans) {
			set.add(s);
		}
		for(String s:set) {
			System.out.println(s);
		}
	}
}

TreeSet类

Treeset集合:Treeset集合内部使用TreeMap作为存储结构,所以在遍历Treese
t时,输出元素的顺序是经过排序的。按照元素的不同比较方式进行排序。所以,添加的元素必须正确实现Comparable接口,如果没有实现Comparable接口,那么创建Treeset时必须传入
个Comparator对象。

 

package com.xn.ffri;

import java.util.Comparator;
import java.util.TreeSet;

public class Fri04 {
	public static void main(String[] args) {
		//一个包含重复字符串的数组
		String[] ans = {"ABC","AB","ABCD","A","DEF","BCD","AC","BCD","ABCDE","B","AD","A","BCD","ABCD"};
		//需求1:过滤重复字符串
		//需求2:自动排序(先按长度再按内容)
		//构造方法:允许传入一个Comparator接口的比较器
		TreeSet set=new TreeSet(new Comparator() {
			@Override
			public int compare(String o1, String o2) {
				//按照长度
				if(o1.length()!=o2.length()) {
					return o1.length()-o2.length();
					//按照内容
				}else {
					return o1.compareTo(o2);
				}
				
			}
		});
		for(String s:ans) {
			set.add(s);
		}
		for(String s:set) {
			System.out.println(s);
		}
	}
}

小结
Set用于存储不重复的元素集合:
HashSet集合特点:无序,值唯一,使用HashMap作为存储结构。
Treeset集合特点:自动排序,值唯一,使用TreeMap作为存诸结构。
利用Set可以去除重复元素;
扁历Sortedset按照元素的排序顺序扁历,也可以自定义排序算法。
 

你可能感兴趣的:(java,哈希算法,开发语言)