「JavaDay16」集合框架

JavaDay16集合框架

代码地址:https://github.com/Philbenzy/Java-question-100/tree/main/day16

1-List的子类特点

(1)ArrayList

底层为数组结构,增删慢,查询快,线程不安全,执行效率高

(2)Vector

和ArrayLsit一样,但是线程安全,执行效率低

(3)LinkedList

底层为链表结构,查询慢,增删快,线程不安全,执行效率高

2-ArrayList练习

两个小练习:

A:ArrayList存储字符串并遍历

B:ArrayList存储自定义对象并遍历

3-LinkedList练习

(1)LinkedList存储字符串并遍历「StorageUseCollection.java」

(2)LinkedList存储自定义对象并遍历「StorageUseCollection.java」

4-泛型是什么?格式是?好处是?

(1)泛型是什么?

  • 早前在Java中使用Object类型作为集合中的元素类型,当需要使用这个集合时,我们就需要使用到类型转换,可以随便转换吗?例如从Integer向String进行转换,当然不能了,所以,我们就需要约定一个新的东西,帮助规范从集合中取出来的元素,泛型这一概念,就来了。
  • 所以,泛型的作用在于推迟类型的确定,让明确类型的工作再创建对象、调用方法时再确定,泛型做到了将数据类型当作一个参数进行传递。

(2)泛型的格式

<数据类型>

此处的数据类型只能是引用类型

(3)泛型优点

  • 避免了每次都进行的类型强转(迭代器的next方法返回的时一个Objec类型)
  • 把运行时期出现的问题提前到了编译时期
  • 可以视数据类型为一个参数,进而传递

(4)泛型的位置

  • 泛型出现在类名上
public class MyStudent<T> {
    private T obj;

    public void setObj(T obj){
        this.obj = obj;
    }

    public T getObj(){
        return obj;
    }
}
  • 泛型出现在方法上
public class MyPerson {
    public <T> void show(T t) {
        System.out.println(t);
    }
}
  • 泛型出现在接口上

泛型出现在接口上时,这里有两种情况

    • 实现类知道我需要实现的类型是什么
    • 实现类不知道我需要实现什么类型,需要到调用再明确

例如:

// 接口
public interface Inter<T> {
    public abstract void show(T t);
}
// 实现类知道我需要实现的类型是什么
public class InterImp implements Inter<String> {
    public void show(String s){
        System.out.println(s);
}
// 实现类不知道我需要实现什么类,需要到调用再明确
public class InterImp<T> implements Inter<T> {
    public void show(T t) {
        System.out.println(t);
    }
}

5-增强for的格式是?好处是?弊端是?

(1)增强for的格式

for(数据类型 引用名称 : 数组或者Collection集合){
	//使用引用的名称即可
}

增强for的底层仍然使用到的是创建迭代器,所以,仍然有可能会出现空指针异常的情况。

(2)好处

  • 可以不用创建迭代器的创建
  • 简化了遍历的流程书写

(3)弊端

需要在前方对数组或者集合进行非空判断

6-静态导入的格式是?注意事项是?

静态导入可以避免方法前缀的书写,导入到方法级别。

(1)静态导入的格式

格式:import static 包名….类名.方法名;

(2)注意事项

  • 只能导入静态方法
  • 多个同名静态方法不能这样操作

7-可变参数的作用是?格式是?注意事项是?

可变参数:在定义方法的时候允许传入的参数列表中的个数未知

(1)格式

修饰符 返回值类型 方法名(数据类型… 变量名){

}

(2)注意

如果一个方法有可变参数的话,并且有多个参数,那么可变参数一定是最后一个出现。

8-完成八个代码练习

(1)Collection、List、ArrayList、Vector、LinkedList存储字符串并遍历, 加入泛型,并有增强for遍历。

案例演示:「StorageUseCollection.java」

(2)泛型定义在类、方法、接口上

案例演示:

  • 类:package 「my_work.genericWithClass」

  • 方法:package 「my_work.genericWithMethod」

  • 接口:package「my_work.genericWithInter」

(3)集合的嵌套遍历

案例演示「ArrayListLoop.java」

(4)产生10个1-20之间的随机数,要求随机数不能重复

案例演示:「RandomTenDemo.java」

(5)键盘录入多个数据,以0结束,并在控制台输出最大值

案例演示:「RandomFromKeyboard.java」

(6)去除集合中的多个字符串的重复元素(创建了新的数组)

案例演示:「ArrayListGetOutDupil.java」

(7)去除集合中的多个自定义对象的重复元素(不创建新数组)

案例演示:「ArrayListWithNoNew.java」

(8)用LinkedList模拟一个栈数据结构的集合类,并测试。

案例演示:「LinkedListDemo.java」

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值