当前位置: 代码迷 >> 综合 >> 今天开始学java(十几)HashSet
  详细解决方案

今天开始学java(十几)HashSet

热度:66   发布时间:2023-12-02 23:36:29.0

set接口的特点:
1、不允许存储重复的元素
2、没有索引,没有带索引的方法,也不能用for循环遍历
java.util.HashSet集合,实现了Set接口
HashSet特点:
除了set接口的特点外,还增加了是一个无序的集合,存储元素和取出元素的顺序有可能不一致
底层是一个哈希表结构(查询的速度非常快)
哈希值:是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,不是数据储存的物理地址)
在object类有一个方法,可以获取对象的哈希值

public class Demo02 {
    public static void main(String[] args) {
    Set<Integer> set = new HashSet<>();set.add(1);set.add(3);set.add(2);set.add(1);//因为不能使用for循环所以使用迭代器遍历set集合Iterator<Integer> it = set.iterator();while (it.hasNext()){
    Integer n = it.next();System.out.println(n);}System.out.println(set);}

set集合存储元素不重复的原理是因为重写了HashCode方法和equals方法,首先比较两个字符串的哈希值是否冲突,如果不冲突,就添加,如果哈希值冲突,再调用queals方法和哈希值相同的元素进行比较,如果返回false,则认定两个两个元素不同。

可变参数

可变参数是jdk1.5之后出现的新特性
适用前提:
当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数
格式:定义方法时
修饰符 返回值类型 方法名(数据类型...变量名){}
可变参数的原理:
可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数
传递的参数个数,可以是0个,N个。
比如说我们要定义一个方法计算三个整数int的和,我们可以

    public static int adda(int a,int b,int c){
    return a+b+c;

但是如果需求变了我们要计算N个整数int的和怎么办?这时候就可以使用可变参数

    int i = addb(1,2,3);System.out.println(i);
}public static int addb(int...arr){
    //定义一个初始化变量,记录累加求和int sum = 0;//遍历数组,获取数组中的每一个元素for (int i : arr) {
    //累加求和sum+=i;}//返回求和结果return sum;}

可变参数使用注意事项:
1、一个方法的参数列表只能有一个可变参数
2、如果方法的参数有多个,那么可变参数必须写在参数列表的末尾
public static void test(String b,double c,int d,int...a){}
可变参数的特殊(终极)写法:
public static void test(Object...obj){}

  相关解决方案