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按照元素的排序顺序扁历,也可以自定义排序算法。