1List接口特点:1是一个有序的集合,存储元素和取出元素的顺序是一样的(存123,取123)
2有索引,可使用带索引的方法

3允许存储重复的元素
2List的子类集合:1ArrayList:查询快 增删慢。底层是一个数组结构
2LinkedList(链表结构):其中包含了大量操作首尾元素的方法,注意,使用
LinkedList集合特有的方法不能使用多态

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:在哈希表结构中又加入了一条链表,用来记录元素的存储顺序
3哈希值:一个十进制的整数,由系统随机给出(sout中对象的@xxxxxxxx就是哈
希值的十六进制表达方式),是一个逻辑地址,而不是实际存储的物理地
址,在Object类里面有一个方法 int xxx.hashCode;可以获取对象的哈希
值,此方法的源码为public native int hashCode();native表示该方法
是本地操作系统的方法。(该方法也可以重写)
(String类的哈希值重写了hashCode的方法)
4哈希表解构:数组+红黑树解构。在一个十六位的数组结构中,相同哈希值的
元素(超过八位)会通过链表或红黑树连接在一起。

5在hashSet中添加自定义类:如果自定义类新建对象属性有重复时(例:同名同年龄),由于是
新建对象,地址值不同,哈希值也不同,此时的hashSet是无法甄别
相同元素的,需要重写hashCode和Equals方法

本文介绍了Java集合框架中List接口及其子类ArrayList、LinkedList和Vector的特点,强调了有序性、索引和重复元素的处理。同时,解释了Set接口不允许重复元素的原理,关注了HashSet、LinkedHashSet的内部结构和哈希值概念。还讨论了自定义类在HashSet中如何避免重复元素的问题,强调了重写hashCode和equals方法的重要性。
168

被折叠的 条评论
为什么被折叠?



