1List接口特点:1是一个有序的集合,存储元素和取出元素的顺序是一样的(存123,取123)
2有索引,可使用带索引的方法
允许存储重复的元素
2List的子类集合:1ArrayList:查询快 增删慢。底层是一个数组结构
首尾元素的方法,注意,使用
特有的方法不能使用多态
3Vector:同步 单线程 相对较慢,JDK1.0版本的早期集合。
3Set接口特点:1不允许存储重复元素2没有索引,不能通过普通for循环遍历
Set不重复原理:Set接口在每次使用add添加元素时,还会默认使用
.hashCode方法和equals方法来比较是否重复
4Set接口的子类:1HashSet:底层是一个哈希表解构,是一个无序的集合,存储和取出元素的
顺序有可能不一样。
package com.bed.javahighclass;
import java.util.Iterator;
import java.util.Set;
public class HashSet {
public static void main(String[] args) {
Set<String> set=new java.util.HashSet<>();
set.add("b");
set.add("e");
set.add("d");
set.add("b");
set.add("a");
set.add("c");
final Iterator<String> it = set.iterator();
while(it.hasNext()){
String s=it.next();
System.out.println(s);//结果为abcde
}
}
}
此时显示的结果就是abcde 顺序没有按照存储顺序,也没有重复元素
2LinkedHashSet:在哈希表结构中又加入了一条链表,用来记录元素的存储顺序
十进制的整数,由系统随机给出(sout中对象的@xxxxxxxx就是哈
希值的十六进制表达方式),是一个逻辑地址,而不是实际存储的物理地
int xxx.hashCode;可以获取对象的哈希
public native int hashCode();native表示该方法
是本地操作系统的方法。(该方法也可以重写)
(String类的哈希值重写了hashCode的方法)
4哈希表解构:数组+红黑树解构。在一个十六位的数组结构中,相同哈希值的
元素(超过八位)会通过链表或红黑树连接在一起。
5在hashSet中添加自定义类:如果自定义类新建对象属性有重复时(例:同名同年龄),由于是
新建对象,地址值不同,哈希值也不同,此时的hashSet是无法甄别
相同元素的,需要重写hashCode和Equals方法