五.Set接口

1.通用

(1)Set接口的特点

  • 不允许存储重复元素
  • 没有索引,没有带索引的方法,也不能使用普通for循环遍历

2.HashSet

(1)HashSet特点

  • 不允许存储重复的元素
  • 没有索引,没有带索引的方法,也不能使用普通的for循环遍历
  • 是一个无序的集合,存储元素的取出元素的顺序有可能不一样
  • 底层是一个哈希表结构(查询的速度非常快)

(2)HashSet存储自定义类型元素

  • Set集合要保证元素唯一(String,Integer...Student,Person),必须重写hashCode方法和equals方法

3.哈希值

(1) 是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来得到的地址,不是数据实际存储的物理地址)
(2)int hashCode() 返回该对象的哈希码值

4.Hash表(HashSet集合存储数据的结构)

(1)jdk8之前:

  • 哈希表=数组+链表

(2)jdk8之后:

  • 哈希表=数组+链表
  • 哈希表-数组+红黑树(提高查询的速度)

(3)哈希表的特点

  • 速度快

5.LinkedHashSet

(1)LinkedHashSet 继承自 HashSet
(2)LinkedHashSet集合特点:

  • 底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表(记录元素的存储顺序),保证元素有序
  • 并且不允许重复

6.可变参数

(1)可变参数:是JDK1.5之后出现的新特性
(2)使用前提:

  • 当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数

(3)使用格式:定义方法时使用

修饰符 返回值类型 方法名(数据类型...变量名){}

(4)可变参数原理:

  • 可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,用来存储这些参数
  • 传递的参数个数,可以是0(不传递),1,2...多个

(5)示例

public static int sum(int...arr){
    int sum = 0;
    for(int i:arr){
        sum+=i;
    }
    return sum;
}

(6)可变参数的注意事项

  • 一个方法的参数列表,只能有一个可变参数
  • 如果方法的参数有多个,那么可变参数必须写在参数列表的末尾
public static int sum(String a,Double b,int...arr){
    int sum = 0;
    for(int i:arr){
        sum+=i;
    }
    return sum;
}

(7)可变参数的特殊写法

public static void method(Object...obj){

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章