List集合和Set集合

11.26知识点
1、List接口
// 有序集合,存储元素和取出元素的顺序是一致的
// 有索引,包含带索引的方法
// 允许存储重复的元素
void add(int index, E element);
// 将指定的元素,添加到该集合中的指定位置上
boolean add(E e);
//添加元素到集合的最后一个位置
E get(int index);
// 返回指定位置的元素
E remove(int index);
// 移除集合中指定位置的元素,返回被移除的元素
E set(int index, E element);
// 用指定元素替换集合中指定位置的元素,返回更新前的元素
1.1、ArrayList集合
// 是List接口的实现类
// 底层是数组实现的,增删慢,查询快
1.2、LinkedList集合
// 是List接口的实现类
// 底层是通过链表实现的,查询慢,增删快
// 里边包含了大量操作首尾元素的方法
// 使用LinkedList集合特有的方法,不能使用多态
public void addFirst(E e)
// 将指定元素插入此列表的开头
public void addLast(E e) (等效于add方法 )
// 将指定元素插入此列表的结尾
public E getFirst()
// 返回列表的第一个元素
public E getLast()
// 返回列表的最后一个元素
public E removeFirst()
// 移除并返回此列表的第一个元素
public E removeLast()
// 移除并返回此列表的最后一个元素
public E pop() (相当于removeFirst())
// 从此列表所表示的堆栈处弹出一个元素
public void push(E e)
// 将元素推入此列表所表示的堆栈
1.3 Vector集合
// 所有单列集合的超类
// 和ArrayList集合一样底层是一样的,通过数组实现,与ArrayList集合不一样的是同步的单线程

2、Set接口
// 继承了Collection接口
// 是一个不包含重复元素的集合
// 没有索引,没有带索引的方法,也不能使用普通的for循环遍历
// 方法同Collection
// Set集合调用add方法的时候,会先调用元素的hashCode方法和equals方法,如果hashCode方法和equals方法都返回true,则不会存储
2.1 HashSet集合
// Set接口的实现类
// 是一个不包含重复元素的集合
// 没有索引,没有带索引的方法,也不能使用普通的for循环遍历
// 是一个无序的集合
// 底层是哈希表结构,查询速度非常快
2.2 哈希值
// 是一个十进制的整数,由系统随机给出(实际就是对象的地址值,是一个逻辑地址,模拟出来的地址,不是数据实际存储的物理地址)
2.2.1 hashCode方法
Object类中的hashCode方法可以返回该对象的哈希码值
hashCode方法源码:
public native int hashCode();
native:代表该方法调用的是本地操作系统的方法
2.3 哈希表
jdk1.8版本之前:哈希表 = 数组 + 链表
jdk1.8版本之后:哈希表 = 数组 + 链表
哈希表 = 数组 + 红黑树(提高查询速度)
相同哈希值存储到数组中,底下挂着该哈希值对应的数据(链表)
如果链表长度超过了8位,就会把链表转换为红黑树(提高速度)
2.4 HashSet存储自定义类型元素
// 必须重写hashCode方法和equals方法
2.4 LinkedHashSet集合
// 是HashSet的子类
// 底层是哈希表(数组 + 链表/红黑树) + 链表(多了一条链表记录元素的存储顺序, 保证元素有序)
// 有序且不允许重复

3、可变参数
使用前提:当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数
使用格式:定义方法时使用
权限修饰符 返回值类型 方法名(数据类型…变量名) {}
可变参数的原理:可变参数底层是一个数组,根据传递参数个数不同,会创建不同长度的数组来存储这些参数,传递参数的个数可以是0个,也可以是多个
注意:
一个方法的参数列表,只能有一个可变参数
如果方法的参数有多个,那么可变参数必须写在参数列表的末尾
代码示例:

    public static void main(String[] args) {
        System.out.println(add(1, 2, 3, 4, 5));
    }
    public static int add (int...arr) {
        int sum = 0;
        for (int i : arr) {
            sum += i;
        }
        return sum;
    }

// 可变参数的终极写法
public static int add (Object...obj) // 可接收任意类型的参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值