集合与泛型,APL和 Object类的toString方法,集合与泛型知识总结

集合

重点:ArrayList   HashMap

组(容器)

容器理解:

                可以在其中放置对象或基本类型数据

                

基本特点:可固定长度,储存的类型一致,还可以保存基本数据类型和引用数据类型。

优势:是一种简单的线性序列,可以快速地访问数组元素,效率高。

当然优势好劣势也是比较明显的:不灵活,用之前还需要提前定义好容器的大小而且还不能随着要求的变化而改变或着是不能扩容

例如:

        需要做一个人员管理系统在人员未知的情况下数组的缺点就尤为明显了,因此这里我们就不能使用数组了,新知识集合就出现了

新容器叫集合 (Collection 顶级接口)

什么是集合

               集合是一种大小(存储数据多少)可变,
              (只能存储引用数据类型)类型不固定,
               适合增删操作的一种存储数据的" 容器 "

      集合的使用场景 一般用于注册账号,或者获取数据的集合;
 

了解一下集合的特点

1.集合是提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变

 2. 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定(非基本数据类型)

3.集合非常适合做元素的增删操作

因此在遇到上述情况的时候我们就有了完美得解方案了

 集合元素可以使用steam流进行快速的聚合运算

 Collection 顶级接口 有2个子接口

 1.list 接口 有顺序 可重复
  2.Set  接口 无顺序 不可以重复

 父类接口只声明通用的接口;而子接口更加丰富;

  List 接口 有顺序输出的时候有顺序;排号一样;
  谁先进,谁先出;

List常用的实现类有三个:

 ArrayList (重要了解)
  LinkedList (了解)
  vector (知道即可)

List系列集合:添加的元素是有序、可重复、有索引。
 ArrayList、LinekdList :有序、可重复、有索引)

Collection 有几个子接口?分别是什么?分别有什么实现类
  并且子接口有什么区别?
  2个子接口: List  和  Set
  List 的实现类:ArrayList linkedList vector

  List :元素有序  数据元素可重复
  Set    元素无序  且数据元素不重复;

LinkedList(了解):

LinkedList类是List接口的一个具体实现类
LinkedList 类用于创建链表数据结构
插入或者删除元素时,它提供更好的性能

那么LinkedList底层基于双链表实现的,
查询元素慢,增删首尾元素是非常快的

LinkedList是支持双链表,定位前后的元素是非常快,
增删首尾的元素也是最快的。
所以提供了很多操作首尾元素的特殊API


如果查询多而增删少用ArrayList集合。(用的最多的)
如果查询少而增删首尾较多用LinkedList集合。

测试动手试一试:

 新闻管理系统,需求如下
  可以存储各类新闻标题(包含ID、名称、创建者)
  NewTitle{
    id      1.
    name    韩国首尔接连出现杀人预告
    author  佚名
    有参构造器;
    new NewTitle(2,关羽吃面条为什么不拌32号混凝土,老登);
    new NewTitle(3,你的月亮我的心,曾小贤);

  }
  ArrayList<NewTitle> title = new ArrayList<>();
  可以获取新闻标题的总数   size
  可以逐条打印每条新闻标题的名称 foreach

public class Movie {
    private String name;
    private double score;
    private String actor;
public static void main(String[] args) {
        // 1、定义一个电影类
        // 2、定义一个集合对象存储3部电影对象
        Collection<Movie> movies = new ArrayList<>();
        movies.add(new Movie("《你好,李焕英》", 9.5, "张小斐,贾玲,沈腾,陈赫"));
        movies.add(new Movie("《唐人街探案》", 8.5, "王宝强,刘昊然,美女"));
        movies.add(new Movie("《刺杀小说家》",8.6, "雷佳音,杨幂"));

        System.out.println(movies);

        // 3、遍历集合容器中的每个电影对象
        for (Movie movie : movies) {
            System.out.println("片名:" + movie.getName());
            System.out.println("得分:" + movie.getScore());
            System.out.println("主演:" + movie.getActor());
        }

    }

总结:

1数组和集合各有优点但是数组用处限制比较大,数组和集合的元素存储的个数问题,

2.数组定义后类型确定,长度固定   , 集合类型可以不固定,大小是可变的。

3.数组和集合存储元素不行同以及优缺点。

- 数组可以存储基本类型和引用类型的数据。

- 集合只能存储引用数据类型的数据。


  数组和集合适合的场景

- 数组适合做数据个数和类型确定的场景。

- 集合适合做数据个数不确定,且要做增删元素的场景。

4.

Collection  List  Set

List : 有索引 有序 可重复
        ArrayList
           add() 增加
           set() 修改
           remove() 删除
           get() 查询
           indexof() 返回下标
           isEmpty() 集合是否为空

        LinkedList
        Vector

泛型理解

例如:生产袋子的厂家,
一开始并不知道我们将来会用袋子装什么,
我们什么都可以装,但是有的时候,我们在使用时,
想要限定某个袋子只能用来装什么,这样我们不会装错
,而用的时候也可以放心的使用,
无需再三思量。
我们生活中是在袋子上“贴标签”,
这样就轻松解决了问题。

<T>就是类型参数,即泛型。

Java中我们在声明方法时,
当在完成方法功能时如果有未知的数据需要参与,
这些未知的数据需要在调用方法时才能确定,
那么我们把这样的数据通过形参表示。
那么在方法体中,
用这个形参名来代表那个未知的数据,
而调用者在调用时,对应的传入值就可以了

增删改查:    (T   t)
可以增加学员;(Student student)
可以增加商品;(Goods goods)
可以增加账户;(Account account)
可以增加用户...(User user)

初学泛型可以修饰什么?
怎么去使用泛型!
 Person<T>  泛型类
 private T t; 泛型成员变量;

那么理解了泛型了,应该就知道泛型的好处了

也就是特点:

使用接口时,
如果没有泛型或不指定泛型,
很麻烦,还有安全隐患
有了泛型并使用泛型,那么既能保证安全,
又能简化代码。

1.API
1.1 API 概述【理解】
什么是 API
API (Application Programming Interface) :应用程序编程接口
java 中的 API
指的就是 JDK 中提供的各种功能的 Java 类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何
实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些 API 如何使用。
1.2 如何使用 API 帮助文档【应用】
打开帮助文档

找到索引选项卡中的输入框

在输入框中输入Random

 

看类在哪个包下

 

看类的描述

 

看构造方法

 

看成员方法

 

2. 常用 API
2.1 Math (应用)
1 Math 类概述
Math 包含执行基本数字运算的方法
2 Math 中方法的调用方式
Math 类中无构造方法,但内部的方法都是静态的,则可以通过 类名 . 进行调用
3 Math 类的常用方法
方法名 方法名                                                      说明
 public static int abs(int a)
                                                                     返回参数的绝对值
public static double ceil(double a)
                                                                  返回大于或等于参数的最小  double                                                                        值,等于一个整数
public static double floor(double a)
                                                                     返回小于或等于参数的最 double                                                                          值,等于一个整数
public static int round(float a)
                                                                   按照四舍五入返回最接近参数的 int
public static int max(int a,int b)
                                                                     返回两个 int 值中的较大值
public static int min(int a,int b)
                                                                      返回两个 int 值中的较小值
public static double pow (double a,double b)
                                                                             返回 a b 次幂的值
public static double random()
                                                                     返回值为 double 的正值, [0.0,1.0)
2.2 System (应用)
System 类的常用方法
         
方法名
说明
public static void exit(int status)
终止当前运行的 Java 虚拟机,非零表示异常终止
public static long currentTimeMillis()
返回当前时间 ( 以毫秒为单位 )

2.3 Object 类的 toString 方法(应用)
Object 类概述
Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类,
换句话说,该类所具备的方法,所有类都会有一份
查看方法源码的方式
选中方法,按下 Ctrl + B
重写 toString 方法的方式
1. Alt + Insert 选择 toString
1. 在类的空白区域,右键 -> Generate -> 选择 toString
toString 方法的作用:
以良好的格式,更方便的展示对象中的属性值
2.4 Object 类的 equals 方法(应用)
equals 方法的作用
用于对象之间的比较,返回 true false 的结果
举例: s1.equals(s2); s1 s2 是两个对象
重写 equals 方法的场景
不希望比较对象的地址值,想要结合对象属性进行比较的时候
重写 equals 方法的方式
1. alt + insert 选择 equals() and hashCode() IntelliJ Default ,一路 next finish 即可
1. 在类的空白区域,右键 -> Generate -> 选择 equals() and hashCode() ,后面的同上。

2.5 Objects (应用)  

方法名                                                               说明
                                                       
public static String toString( 对象 )
                                                                返回参数中对象的字符串表示形式。
public static String toString( 对象 , 默认字符串 )
                                                                    返回对象的字符串表示形式。
public static Boolean isNull( 对象 )
                                                                     判断对象是否为空
public static Boolean nonNull( 对象 )
                                                                     判断对象是否不为空

2.6 BigDecimal ( 应用 )
作用
可以用来进行精确计算
构造方法
方法名                                                         说明
BigDecimal(double val)
                                                                  参数为 double
BigDecimal(String val)
                                                                   参数为 String

常用方法
方法名
说明

public BigDecimal add(另一个BigDecimal对象)

public BigDecimal subtract (另一个BigDecimal对象)

public BigDecimal multiply (另一个BigDecimal对象)

public BigDecimal divide (另一个BigDecimal对象)

public BigDecimal divide

加法

                                

减法

乘法

除法

除法

总结
1. BigDecimal 是用来进行精确计算的
2. 创建 BigDecimal 的对象,构造方法使用参数类型为字符串的。
3. 四则运算中的除法,如果除不尽请使用 divide 的三个参数的方法
3. 包装类
3.1 基本类型包装类(记忆)
基本类型包装类的作用
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据
常用的操作之一:用于基本数据类型与字符串之间的转换
3.2 Integer 类(应用)
Integer 类概述
包装一个对象中的原始类型 int 的值
Integer 类构造方法
方法名                                                                                说 明
public Integer(int value)
                                                                     根据 int 值创建 Integer 对象 ( 过时 )
public Integer(String s)
                                                               根据 String 值创建 Integer 对象 ( 过时 )
 public static Integer valueOf(int i)
                                                                返回表示指定的 int 值的 Integer 实例
public static Integer valueOf(String s)
                                                         返回一个保存指定值的 Integer 对象 String

4. 递归
4.1 递归【应用】
递归的介绍
以编程的角度来看,递归指的是方法定义中调用方法本身的现象
把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解
递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算
递归的注意事项
递归一定要有出口。否则内存溢出
递归虽然有出口,但是递归的次数也不宜过多。否则内存溢出
4.2 递归求阶乘【应用】
案例需求
用递归求 5 的阶乘,并把结果在控制台输出

内存圈:

 

5. 数组的高级操作
5.1 二分查找 ( 理解 )
二分查找概述
查找指定元素在数组中的位置时 , 以前的方式是通过遍历 , 逐个获取每个元素 , 看是否是要查找的元素 , 这种方式
当数组元素较多时 , 查找的效率很低
二分查找也叫折半查找 , 每次可以去掉一半的查找范围 , 从而提高查找的效率
需求
在数组 {1,2,3,4,5,6,7,8,9,10} , 查找某个元素的位置
实现步骤
1. 定义两个变量,表示要查找的范围。默认 min = 0 max = 最大索引
2. 循环查找,但是 min <= max
3. 计算出 mid 的值
4. 判断 mid 位置的元素是否为要查找的元素,如果是直接返回对应索引
5. 如果要查找的值在 mid 的左半边,那么 min 值不变, max = mid -1. 继续下次循环查找
6. 如果要查找的值在 mid 的右半边,那么 max 值不变, min = mid + 1. 继续下次循环查找
7. min > max 时,表示要查找的元素在数组中不存在,返回 -1
注意事项
有一个前提条件,数组内的元素一定要按照大小顺序排列,如果没有大小顺序,是不能使用二分查找法的
5.3 快速排序 ( 理解 )
快速排序概述
冒泡排序算法中 , 一次循环结束 , 就相当于确定了当前的最大值 , 也能确定最大值在数组中应存入的位置
快速排序算法中 , 每一次递归时以第一个数为基准数 , 找到数组中所有比基准数小的 . 再找到所有比基准数大的 .
小的全部放左边 , 大的全部放右边 , 确定基准数的正确位置
核心步骤
1. 从右开始找比基准数小的
2. 从左开始找比基准数大的
3. 交换两个值的位置
4. 红色继续往左找,蓝色继续往右找,直到两个箭头指向同一个索引为止
5. 基准数归位
代码实现:
5.4 Arrays ( 应用 )
Arrays 的常用方法

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值