Set子接口
set是Colletion接口的子接口,它和List接口的区别如下:
List接口:有序、有下标、元素可以重复
set接口:无序、无下标、元素不可重复
set接口的所有抽象方法源自它的父接口Colletion,set接口有两个实现类,一个是Hashset(存储结构为哈希表),另外一个是treeset
class Demo01{
public static void main (String [args]){
Set<String> set = new HashSet<String>();
//添加元素
set.add("华为");
set.add("三星");
set.add("苹果");
//删除元素
set.remove("小米");
//遍历元素
Iterator<String> it = set.iterator();
while(it.hasnext){
System.out.println(it.next);
}
}
}
treeset实现类是通过红黑树(二叉查找树)的结构进行存储,它的特点是可以自动对传进来的元素进行排序,无法添加重复元素。
注意点:
- 在使用Treeset实现类创建集合,添加引用类型的元素时(如对象实例),该元素要实现Comparable接口,否则会抛出类型转换异常
- 实现Comparable接口以后要重写该接口的compareto方法,(红黑树存储结构特点,比根节点大的数据存在右边,比他小的存在左边,该方法是用来设置该集合需要比较的属性)以此来完成排序
- 创建对象时也可以直接使用Treeset类的构造器传进来一个comparetor这样不用实现Comparable接口,在当前类里重写compare方法定义比较规则
import java.util.Comparator;
import java.util.TreeSet;
public class Demo05 {
public static void main(String[] args) {
//创建treeset集合且直接使用匿名类的方式定义一个比较器Comparator
TreeSet treeSet = new TreeSet<Person>(new Comparator<Person>() {
//定义比较规则
@Override
public int compare(Person o1, Person o2) {
//比较年龄,把较小的值排在前面
int i1 = o1.getAge()-o2.getAge();//计算值赋给i1
//比较名字,负整数说明前一个名字较小,0表示相同,正整数说明前一个名字较大
int i2 = o1.getName().compareTo(o2.getName());//计算值赋给i2
//定义返回规则,i1的结果是0说明比较的两个对象年龄相同进行名字的比较,把名字较小的返回
return i1==0?i2:i1;
}
});
Person p1 = new Person(18,"zhangsan");
Person p2 = new Person(9,"lisi");
Person p3 = new Person(30,"wangwu");
treeSet.add(p1);
treeSet.add(p2);
treeSet.add(p3);
System.out.println("元素个数"+treeSet.size());
System.out.println(treeSet.toString());
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!