List、Set、数据结构、Collections
Java学习笔记
三月二日
Hash 值 :由系统随机给的一个十进制的整数,作为逻辑地址,不是物理地址。
这是Object的方法,可以进行覆盖重写,我们写什么值得到什么值,但是物理地 址不会发生改变,进行判断时,会返回false。
String类的hashCode进行了覆盖重写。
通常的toString方法,得到的值,其实就是HashCode的十六进制格式。
Set集合存储元素不重复的原理:
前提调用的元素重写HashCode和equals方法,不再由随机生成Hash值和 比较地址值。
使用HashCode()方法得到Hash值进行比较,如果发生“哈希冲突”,再由equals方法比较其内容是否相同。如果相同则不添加该元素。
HashSet的自定义类的使用,需要在自定义类中,重写HashCode和equals方法和toString 方法。这个集合是无序的。不允许重复。
LinkedHashSet 使用方法与HashSet一致,底层都是哈希表(数组+链表/红黑树),唯一不同的是多了一条链表,用来记录元素的存储顺序,保证元素有序。
可变参数,使用前提:当方法的数据类型已经确定,数据个数未知的时候,可以使用可变参 数。
使用格式:定义方法时使用
修饰符 返回值类型 方法名(数据类型…变量名){}
可变参数的原理:
可变参数的底层是一个数组,根据传递参数的个数不同,会创建不同长度的数组,来存储这些参数,传递参数的的个数,可以是0个(不传递),1,2,3…多个。
可变参数的注意事项:
1.一个方法的参数列表,只能有一个可变参数。
2.如果方法的参数有多个,那么可变参数必须写在参数列表的末尾。
Collections 工具类里的addAll&shuffle 方法。
addAll可以传入多个参数添加元素
Shuffle可以打乱集合中的元素顺序。
因为是静态方法可以直接调用。
Sort方法,对集合进行默认排序
注意前提:该排序的集合里存储的元素,必须实现Comparable,重写接口中的方法comparableTo定义排序的规则。实现 implements Comparable<本类>{}
comparableTo返回值 return this.成员变量 - o.成员变量 升序 ,反之降序。
sort(List list, Comparator<? super T> c)
根据指定比较器产生的顺序对指定列表进行排序。自定义规则。
可以进行组合排序。
需要new Comparator<类>()写出匿名内部类。