今天开始学java(十几)HashSet

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){}

发布了77 篇原创文章 · 获赞 8 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章