Set接口特点及实现
1.特点:类似于数学集合,无顺序,不可重复,只有一个null值
2.实现类:①HashSet无序的,不可重复的
②LinkedHashSet保留插入顺序不可重复的
③TreeSet有序的,不可重复的,自然排序
Set接口API
Set接口API
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.Iterator;
public class SetDemo {
public static void main(String[] args) {
//1.创建一个Set对象
Set set = new HashSet();
//2.API
//a)添加元素
set.add("abc");
set.add("123");
set.add("456");
set.add("abc");
set.add("A");
set.add("Ba");
System.out.println("set:"+set);//[A, 123, abc, 456, Ba] 无序,重复项不添加
//b)清空集合
//set.clear();
//System.out.println("set:"+set);//[]
//c)判断对象是否在集合中
boolean contatins = set.contains("A");
System.out.println(contatins);//true
//d)判断集合是否为空
System.out.println("是否为空:"+set.isEmpty());//false
//e)遍历set集合
Iterator it = set.iterator();
while(it.hasNext()){
String str = (String)it.next();
System.out.print(str+" ");
}//A 123 abc 456 Ba
System.out.println();
//f)移除元素
System.out.println(set.remove("A"));//true
System.out.println(set);//[123, abc, 456, Ba]
//g)
System.out.println(set.size());//4
//h)转换成数组
Object[] objs = set.toArray();
System.out.println("对象内容为:"+ Arrays.toString(objs));//对象内容为:[123, abc, 456, Ba]
//i)遍历过程中不能执行删除操作
/*Iterator it1 = set.iterator();
while(it.hasNext()){
String str = (String)it.next();
//if (str.equals("123")) {set.remove(str); } 报错
System.out.print(str+" ");
}//A 123 abc 456 Ba
System.out.println();
*/
}
}
HashSet特点及API
1.特点
①采用hash算法的Set,相当于HashMap的key
②默认容量16,加载因子是75%
③HashSet非线程安全的
④内部原理:HashMap的key
⑤在集合遍历过程中不能使用HashSet本身的方法删除或者添加元素,可以
使用迭代器的方法完成删除
2.API
HashSet的API与Set的API基本相同,都可以使用
LinkedHashSet特点
1.HashSet的子类
2.不可重复的
3.插入顺序有序的
LinkedHashSet实例
/*
从控制台输入一个字符串,统计每个字符串出现的次数,并且按照指定顺序输出结果
*/
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.Map.Entry;
public class MapCount {
public static void main(String[] args) {
//1.定义字符串
String str = "sadas7dal4k89jsad1fig44as5as95jklewj6o";
//2.将字符串转换成char数组
char[] buf = str.toCharArray();
//3.创建一个Map集合保存字符和对应的次数
TreeMap map = new TreeMap();
//4.遍历数组
for(char c : buf){
//5.判断Map集合中是否存在char,如存在在key对应的value上加一,如果不存在就保存
if(map.containsKey(c)){
int count = (int)map.get(c);
map.put(c,count+1);
}else{
map.put(c,1);
}
}
//System.out.println(map);//{1=1, 4=3, 5=2, 6=1, 7=1, 8=1, 9=2, a=6, d=3, e=1, f=1, g=1, i=1, j=3, k=2, l=2, o=1, s=5, w=1}
//6.遍历集合
Set entrySet = map.entrySet();
for(Object object : entrySet ){
Entry entry = (Entry)object;
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
}
TreeSet特点及API
1.默认容量为0
2.采用二叉树的算法
3.原理:TreeMap的key
4.在集合遍历过程中不能使用TreeSet本身的方法删除或者添加元素,可以使用迭代器的方法完成删除
5.按照自然排序存放内容。(升序)(按哈希码排序)
Demo1
import java.util.HashSet;
import java.util.TreeSet;
public class TreeMapDemo {
public static void main(String[] args) {
//1.创建一个对象
TreeSet tree = new TreeSet();
//2.添加元素
tree.add("abc");
tree.add("123");
tree.add("456");
tree.add("abc");
tree.add("A");
tree.add("Ba");
System.out.println(tree);//[123, 456, A, Ba, abc]
//3.将其他集合传化为TreeSet
HashSet hashSet = new HashSet();
hashSet.add(7);
hashSet.add(4);
hashSet.add(452);
hashSet.add(42);
hashSet.add(8);
hashSet.add(24);
System.out.println(hashSet);
TreeSet tree1 = new TreeSet(hashSet);//[4, 452, 7, 8, 24, 42]
System.out.println((tree1));//[4, 7, 8, 24, 42, 452]
//4.获取元素
//a)获取第一个元素
System.out.println("第一个元素:"+tree1.first());//第一个元素:4
//b)获取最后一个元素
System.out.println("最后一个元素:"+tree1.last());//最后一个元素:452
}
}