Java学习day017(ArrayList的补充、Vector、Set)

本文详细探讨了Java集合框架中的ArrayList,包括toArray()、addAll()、contains()、clear()等方法的使用,以及匿名内部类遍历列表的实现。还讲解了数组扩容的机制,并解答了面试题:Java中是否存在goto。此外,对比了ArrayList、Vector和LinkedList的区别,强调了线程安全和数据结构特性。最后,提到了Set接口的基本特点。
摘要由CSDN通过智能技术生成

今天查漏补缺
学习新内容


  • 单列集合:Collection
    • 可重复:List
      • ArrayList
      • LinkList
    • 不可重复:Set
  • 双列集合:Map

一、ArrayList的补充

1.toArray()将,list转换为数组

在这里插入图片描述
从上图可以指定,该方法返回的是一个 Objecr[] 数组

【代码实现】🎉

List<String> names = new ArrayList<>();
names.add("张三");
names.add("李四");
names.add("王五");
names.add("赵六");
names.add("钱七");

Object[] array = names.toArray();
for (Object string : array) {
    System.out.println(string.toString());
}

2.addAll(),contain(),clear()

【代码实现】🎉

List<String> names = new ArrayList<>();
names.add("张三");
names.add("李四");
names.add("王五");
names.add("赵六");
names.add("钱七");

List<String> names2 = Arrays.asList("刘德华", "张学友", "郭富城", "黎明");

// 列表的拼接
names.addAll(names2);
System.out.println(names);]

// 清空列表
names.clear();

System.out.println(names.contains("张三")); // true
System.out.println(names.contains("法外狂徒")); // false

3. 使用匿名内部类实现遍历列表

【代码实现】🎉

List<String> names2 = Arrays.asList("刘德华", "张学友", "郭富城", "黎明");

names2.forEach(new Consumer<String>() {
    @Override
    public void accept(String t) {
        System.out.println(t);
    }
});

在这里插入图片描述
在这里插入图片描述

匿名内部类
前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类
本质:是一个继承了该类或者实现了该接口的子类匿名对象

4.✨数组扩容

jdk8及其以后,如果初始化ArrayList使用的是无参构造,则默认创建一个{}空数组,长度为0,只有第一次添加元素时,才会进行数组扩容,默认创建一个大小为10的对象数组。

如果再次扩容,大小为:int newCapacity = oldCapacity + (oldCapacity >> 1);
也就是为原来大写的1.5倍。

如果new ArrayList的时候,使用的有参的构造,则直接创建大小为10的对象数组。

注意:如果数据是固定的,建议使用有参的构造函数来创建对应个ArrayList

5.面试题:在java中,存在goto吗?

java使用label技术实现C++中goto语法!!!

【代码实现】🎉

found: {
            if (o == null) {
                for (; i < size; i++) {
			if (es[i] == null) {
				# break
				break found;
			}
		}     
            } else {
                for (; i < size; i++)
                    if (o.equals(es[i]))
                        break found;
            }
            return false;
        }

二、Vector

Vector也是一个动态对象数组,非常像ArrayList,其中的各种方法也和ArrayList类似

需要注意的是,Vector提供的大多数方法,都是被同步锁修饰的方法

言外之意:Vector是一个线程安全类,主要使用的多线程环境下

【代码举例】🎉
在这里插入图片描述

Vector初始化容量也是10,需要注意的是,每次扩容会是原有容量的2倍。

三、LinkedList

线性表

注意:ArrayList和Vector底层都是动态数组实现的,而LinkedList是基于双向链表的实现

四、✨ArrayList、Vector和LinkedList的区别?

此处引用了JavaGuide
1.从版本上看,ArrayList和Vector在JDK1.0就诞生了,LinkedList是在JDk1…2才诞生的


2.Arraylist 和 Vector 的区别?
在这里插入图片描述


3.Arraylist 与 LinkedList 区别?
在这里插入图片描述

五、Set接口(待完善)

特点:
1、不能存在重复数据
2、元素没有顺序(因为使用的hash算法实现的)
3、一旦插入成功,顺序也就固定下来

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值