set全部继承sollection
set集合特点:
不包含重复元素的集合
没有带索引的方法,所以不能使用普通for循环便利
set是一个接口,不能直接被实例化,HashSet可把set实例化
HashSet对集合的迭代顺序不做任何保证
哈希值:
是JDK根据对象的地址或者字符串或者数组算出来的int类型的数值
Object类中有一个方法可以获取对象的哈希值
public int hashCode():返回对象的哈希码值
同一个对象调用HashCode值是一样的
默认情况下,不同的对象调用HashCode值不是一样的,但是通过方法重写,可以实现不同对象的哈希值是相同的
HashSet集合概述和特点
是Set接口的实现类
底层数据结构是哈希表
对集合的迭代顺序不作任何保证,就是说不能保证存储和取出的元素顺序一致
没有索引的方法,所以不能使用普通的for循环
由于是Set集合,所以是不包含重复元素的集合
HashSet保持元素唯一性的源码分析
哈希表:
是一个数组
范型
范型的本质是参数化类型,也就是说将类型由原力啊的具体的类型参数化,然后再使用/调用时传入具体的类型
这种参数可以用在类、方法、和接口中,分别被称为范型类、范型方法、范型接口
定义格式:
<类型>:指的一种类型的根底。这里可以看成是形参
<类型1,类型2…>:指定多种类型的格式,多种类型之间用逗号隔开。这里的类型可以看成是形参
将来具体调用时侯给定的类型可以看成是实参,并且实参的类型只能是引用数据类型
范型的好处:
把运行期间的问题提前到了变异期间
避免了强制类型转换
范型类:
public class Generic {
private T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
调用:Generic g1=new Generic();
g1.setT(“liulianlian”);
System.out.println(g1.getT());
Generic g2=new Generic();
g2.setT(18);
System.out.println(g2.getT());
范型方法:
例如:public void show(T t){}
public class Generic {
public loud show(T t){
System.out.println(t);
}
}
调用:
Genergic g=new Generic();
g.show(“liulianlian”);
g.show(10);
范型接口:
例如:
public interface Generic<T>{}
类型通配符:<?>
List<?>:表示元素类型未知的List,他的元素可以匹配任何的类型
这种带通配符的List仅仅表示它是各种范型List的父类,并不能把元素添加到其中。
如果我们不希望List<?>是任何范型List的父类,可以使用类型通配符的上限。
类型通配符的上限:<?extends类型>
List<?extends number>:他表示的类型是number或者其子类型
除了可以指定类型通配符的上限,我们也可以指定通配符的下限
类型通配符下限:<? super类型>
List<? super Number>:他表示的类型是Number或者其父类型
可变参数:
public static int sun(int …a){
}
可变参数的使用:
Arrays工具类中有一个静态方法:
public static ListasList(T…a):返回由指定数组支持的固定大小的列表
返回的集合不能进行增删操作,可以做修改操作
List接口中有一个静态方法:
public static Listof(E…elements):返回包含任意数量元素的不可变列表
返回的集合不能做增删改操作
List接口中有一个静态方法:
public static Setof(E…elements):返回一个包含任意数量元素的不可变集合
在给元素的时候,不能给重复的元素
返回的集合不能做增删操作,没有修改的方法