Java中Set集合
Java中Set集合
一个不包含重复元素的集合;
此接口没有索引,没有带索引的方法;
set接口跟Collection方法基本一致,主要研究其实现类;
简介
此类实现set接口,由哈希表(实际上是一个HashMap实例)支持;
它不保证set的迭代顺序,特别是不保证该顺序恒久不变;
允许使用null元素;
此实现不是同步的(多线程,速度快);
特点
一个不包含重复元素的集合;
此接口没有索引,没有带索引的方法;
无序的集合,存取元素的顺序可能不一致;
底层是一个HashMap结构(查询速度快);
代码语言:javascript代码运行次数:0运行复制 //多态方式实现HashSet
Set<Integer> set = new HashSet<>();
set.add(7);
set.add(1);
set.add(4);
set.add(4);//不允许存储重复的数据,编译器智能提醒
//迭代器遍历
Iterator<Integer> integerIterator = set.iterator();
while (integerIterator.hat()) {
println(());//1 4 7 重复是数据没存进来
}
//增强型for循环遍历,底层是迭代器
for (int i : set){
println(i);//1 4 7 重复是数据没存进来
}
哈希值是一个十进制的整数,由系统随机给出(就是对象的地址值,是第一个逻辑地址,是模拟出来的地址值,不是数据实际存储的的物理地址值)
获取哈希值的方法 int hashCode();
JDK1.8之前:哈希表 = 数组 + 链表;
JDK1.8之后:哈希表 = 数组 + 红黑树(提高查询速度);
哈希表的特点:查询速度快;
基本思路:
当set调用add方法的时候,会将当前所要存储的元素的哈希值在集合中查,若未查到,则存储集合,若查到则会调用equals方法,与集合中已经存在的相同哈希值的元素进行比较,若返回true则不再将所要存储的元素存储到集合中,若返回false则将所要存储的元素存储到集合中。
1、概述
要想将自定义的类存入到HashSet必须重写hashCode和equals方法(以保障元素唯一);
2、使用
要求:同名和同年龄的人视为一个人,不允许存储两个;
person类:
代码语言:javascript代码运行次数:0运行复制public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
= name;
this.age = age;
}
@Override
public String toString() {
return "Persion{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person persion = (Person) o;
return age == persion.age &&
(name, );
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
public String getame() {
return name;
}
public void setame(String name) {
= name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Test测试类:
代码语言:javascript代码运行次数:0运行复制public class MyHashSet {
public static void main(String[] args) {
Set<Person> set = new HashSet<>();
set.add(new Person("小明",18));
set.add(new Person("小兰",19));
set.add(new Person("小明",18));
println(set);
//[Person{name='小兰', age=19}, Person{name='小明', age=18}]
}
}
简介:
具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现;
此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表;
底层是哈希表+链表;
HashSet:无序的,不允许重复;
LinkedHashSet:有序的,不允许重复;
使用场景:
当参数的数据类型已经确定,但参数的个数不确定,此时可使用可变参数;
使用格式:
修饰符 返回值类型 方法名(数据类型...变量名){}
可变参数原理:
可变参数底层是一个数组,根据传入的参数数量不同,创建不同长度的数组,来存储这些参数;
传递的参数数量可以为0;
代码语言:javascript代码运行次数:0运行复制public class Test {
public static void main(String[] args) {
println(sum(1,2,,4,5,6,7,8,9,0,7,56,4,4,6,67,64));//25
}
public static int sum(int...arr){
//实际上arr可以当做一个数组用
int sum = 0;
for(int i:arr){
sum+=i;
}
return sum;
}
}
注意事项:
只能有一个可变参数;
如果有多个参数,可变参数必须写在参数列表末尾;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent 删除set集合接口java存储#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上一篇:Java异常详解
下一篇:【Java设计模式】020
推荐阅读
留言与评论(共有 11 条评论) |
本站网友 清宫表怎么看 | 13分钟前 发表 |
来存储这些参数;传递的参数数量可以为0;代码语言:javascript代码运行次数:0运行复制public class Test { public static void main(String[] args) { println(sum(1 | |
本站网友 什么是财政赤字 | 3分钟前 发表 |
age); } public String getame() { return name; } public void setame(String name) { = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }Test测试类:代码语言:javascript代码运行次数:0运行复制public class MyHashSet { public static void main(String[] args) { Set<Person> set = new HashSet<>(); set.add(new Person("小明" | |
本站网友 重庆银行网上银行 | 26分钟前 发表 |
主要研究其实现类;2 | |
本站网友 丈夫出轨怎么办 | 25分钟前 发表 |
存取元素的顺序可能不一致;底层是一个HashMap结构(查询速度快);代码语言:javascript代码运行次数:0运行复制 //多态方式实现HashSet Set<Integer> set = new HashSet<>(); set.add(7); set.add(1); set.add(4); set.add(4);//不允许存储重复的数据 | |
本站网友 肝移植 | 30分钟前 发表 |
本站网友 吴建文 | 7分钟前 发表 |
本站网友 安利化妆品 | 6分钟前 发表 |
arr){ sum+=i; } return sum; } }注意事项:只能有一个可变参数;如果有多个参数 | |
本站网友 marshal | 12分钟前 发表 |
HashSet存储自定义类型元素1 | |
本站网友 苏宁易购和京东商城 | 6分钟前 发表 |
age=19} | |
本站网友 东环影城影讯 | 13分钟前 发表 |
set集合存储元素不重复原理基本思路:当set调用add方法的时候 |