A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 刘文杰 于 2018-7-26 15:01 编辑

day01【Object类、各种类,常用API 】day02【Collection 迭代器 增强for 泛型】

Object类

Date 类

DateFormat类

Calendar类  (日历类)

System类

StringBuilder类

包装类

toString方法的好处是在碰到println方法的时候会被自动调用,不用显示的写出来。

一般我们都要输出JavaBean的属性名和属性值, Alt + Insert 选择 toString() 即可

public boolean equals(Object obj) :指示其他某个对象是否与此对象"相等"

重写equals()的作用:

不重写时, 自定义对象默认继承Object类的equals()方法, 通过 == 比较地址值


   long

       \       SimpleDateFormat

        Date-------------------- String

       /

Calendar     

long getTime(): 获取Date对象中保存的时间毫秒值

void setTime(long time):修改Date对象的时间

java.text.DateFormat抽象类: 用于格式化和解析时间. 提供了方便的方法

// 常用成员方法 (抽象类不能创建对象, 但可以有非抽象的方法供子类使用)

String format(Date date): 格式化, 从Date对象转换为String对象

Date parse(String source):解析, 从String对象转换为Date对象


java.text.SimpleDateFormat类

// 构造方法

SimpleDateFormat(String pattern): 用给定的模式和默认语言环境的日期格式符号创建对象

// 常用模式: 可在SimpleDateFormat类中查看

y: 年

M: 月

d: 日

H: 时 (24小时制)

m: 分

s: 秒


E: 星期

D: 年中的天

K: 小时(12小时制)

S: 毫秒


示例: "yyyy-MM-dd E HH:mm:ss.SSS"


Calendar.getInstance() 会根据当前系统获取合适的子类对象, 我们获取到的是 GregorianCalendar

Calendar类的常用功能


java.util.Calendar抽象类: 代表日历, 提供了不同国家的历法, 封装了很多时间属性

// 静态成员变量

static int YEAR        :年份

static int MONTH       :月份. 注意月份数值是 0-11

static int DAY_OF_MONTH:日期

static int HOUR        :小时(12小时制)

static int HOUR_OF_DAY  :小时(24小时制)

static int MINITE      :分钟

static int SECOND      :秒

// 非静态成员方法

int get(int field): 获取指定日历字段的值   int year = cal.get(Calendar.YEAR)

void set(int field, int value): 修改指定日历字段为指定的值

void add(int field, int amount): 调整指定日历字段的值. 正数增加, 负数减少

Date getTime(): Calendar转Date

void setTime(Date d): Date转Calendar​

// 示例

// 获取日期:

int day = calendar.get(Calendar.DAY_OF_MONTH);

// 修改年:

calendar.set(Calendar.YEAR, 2000);

// 修改月:

calendar.set(Calendar.MONTH, 0);

// 日期增加一天:

calendar.add(Calendar.DAY_OF_MONTHY,1);

// 日期减少一天:

calendar.add(Calendar.DAY_OF_MONTHY,-1);​

日期转换总结:

   long (数学计算)
        \       SimpleDateFormat
         Date -------------------- String(用户输入和显示)
        /
Calendar (获取时间的某个部分)

long和Date对象互转
        利用Date
                Date(longmillis): long转Date
                longgetTime(): Date转long
String和Date对象互转
        利用SimpleDateFormat
                Dateparse(String s): String转Date
                Stringformat(Date): Date转String
Calendar对象和Date对象互转
        利用Calendar
                DategetTime(): Calendar转Date
                voidsetTime(Date d): Date转Calendar

static long currentTimeMillis(): 返回当前系统时间的毫秒值

补充:

    long start = System.currentTimeMillis();

       // 循环

       for (int i = 0; i < 100000; i++) {

          System.out.println("我爱Java " + i);

       }

       // 循环结束后记录结束时间毫秒值

       long end = System.currentTimeMillis();

// 静态方法

static void arrayCopy(Object src,int srcPos,Object dest,int destPos,int length):复制源数组中指定长度个元素到一个新数组中

StringBuilder

字符串拼接问题

理解+拼接String有什么缺点

简述StringBuilder类与String类的区别。

答:String类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象,所以经常改变内容的字符串最好不要用String,因为每次生成对象都会对系统性能产生影响。

StringBuilder又称为可变字符序列,是JDK5.0中新增加的一个类,它是一个类似于String的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。即它是一个容器,容器中可以装很多字符串,并且能够对其中的字符串进行各种操作。它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容,StringBuilder会自动维护数组的扩容。


new StringBuilder("原字符串").append("要拼接的字符串").toString();

额外创建了多余的StringBuilder对象

StringBuilder概述与构造

知识点:

StringBuilder类有什么作用
StringBuilder有哪些常用构造方法

java.lang.StringBuilder类: 可变字符序列, 可以高效拼接字符串. 底层使用数组保存

// 构造方法

StringBuilder(): 构造一个空的StringBuilder容器

String和StringBuilder互转: 利用StringBuilder

StringBuilder(String str): String转StringBuilder

String toString(): StringBuilder转String


包装类

包装类概述

包装类: 基本数据类型对应的引用数据类型
ArrayList<Integer> list = ...

list.add(10)

int a = list.get(0);

  
基本类型
  
  
对应的包装类(位于java.lang包中)
  
  
byte
  
  
Byte
  
  
short
  
  
Short
  
  
int
  
  
Integer
  
  
long
  
  
Long
  
  
float
  
  
Float
  
  
double
  
  
Double
  
  
char
  
  
Character
  
  
boolean
  
  
Boolean
  


String转基本类型: 利用包装类的静态方法

   static byte parseByte(String s): 将字符串参数转换为对应的byte基本类型

   static short parseShort(String s): 将字符串参数转换为对应的short基本类型 Short

   static int parseInt(String s): 将字符串参数转换为对应的int基本类型 Integer

   static long parseLong(String s): 将字符串参数转换为对应的long基本类型

   static float parseFloat(String s):将字符串参数转换为对应的float基本类型

   static double parseDouble(String s): 将字符串参数转换为对应的double基本类型

   static boolean parseBoolean(String s): 将字符串参数转换为对应的boolean基本类型

day02【Collection、泛型】

主要内容

Collection集合

迭代器

增强for

泛型



数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。



集合按照其存储结构可以分为两大类,分别是单列集合 java.util.Collection 和双列集合 java.util.Map  



Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.List 和 java.util.Set 。其中, List 的特点是元素有序、元素可重复。 Set 的特点是元素无

序,而且不可重复。 List 接口的主要实现类有 java.util.ArrayList 和 java.util.LinkedList , Set 接口

的主要实现类有 java.util.HashSet 和 java.util.TreeSet 。


Collection接口: 单列集合顶层

|_ List接口: 元素存取有序, 可重复, 有索引

|_ Set接口: 元素存取无序, 不可重复, 无索引



整个集合类的继承体系。

Collection是所有单列集合的父接口,


public boolean  add(E e) : 把给定的对象添加到当前集合中 。

public void clear() :清空集合中所有的元素。

public boolean remove(E e) : 把给定的对象在当前集合中删除。

public boolean contains(E e) : 判断当前集合中是否包含给定的对象。

public boolean isEmpty(): 判断当前集合是否为空。

public int size() : 返回集合中元素的个数。

public Object[] toArray(): 把集合中的元素,存储到数组中。

Iterator<E>iterator(): 获取集合的迭代器对象

       Iterator接口: 迭代器


tips: 有关Collection中的方法可不止上面这些,其他方法可以自行查看API学习。


第二章 Iterator迭代器


2.1 Iterator接口 一个遍历集合的接口

Collection接口与 Map 接口主要用于存储元素,而 Iterator主要用于迭代访问(即遍历) Collection 中的元素,因此Iterator 对象也被称为迭代器。


public Iterator iterator(): 获取集合对应的迭代器,用来遍历集合中的元素的。


。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。


Iterator接口的常用方法如下:

public E next():返回迭代的下一个元素。

public boolean hasNext():如果仍有元素可以迭代,则返回 true。


tips:在进行集合元素取出时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将会发生

java.util.NoSuchElementException没有集合元素的错误。


2.2 迭代器的实现原理

hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出, 否则说明已到达了集合末尾,停止遍历元素。


迭代器的原理:

迭代器有一个指针(其实就是个变量保存索引值), 最初指向集合的 -1 索引

hasNext() 方法可以判断下一个索引是否有元素

next() 方法移动指针到下一个索引, 并返回元素


}


Iterator 中 删除元素用的是 他的对象点上remove;(不可以用Collection的对象点)


2

它用于遍历Collection和数组。通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作


for(int a : arr){//a代表数组中的每个元素      

System.out.println(a);           

}        

   

     System.out.println(s);       (快捷键 :coll.for)

     }   

}


增强for, 普通for, 迭代器的区别:

增强for:

优点: 获取元素很方便, 格式简单

缺点: 没有普通for中的索引, 没有迭代器对象可以进行元素的增删

应用场景: 适用于遍历获取数组和集合元素的场景

普通for:

优点: 有索引可以使用, 某些方式可以在遍历过程中增删元素

缺点: 格式繁琐

应用场景: 需要用到索引的场景

迭代器:

优点: 可以使用迭代器对象的方法操作元素

缺点: 格式繁琐

应用场景: 需要在迭代过程中增删元素的场景

  


tips: 新for循环必须有被遍历的目标。目标只能是Collection或者是数组。新式for仅仅作第三章 泛型


创建集合对象时, 需要确定泛型具体的类型


Collection虽然可以存储各种对象,但实际上通常Collection只存储同一类型对象。



tips:一般在创建对象时,将未知的类型确定具体的类型。当没有指定泛型时,默认类型为Object类型。


3.2 使用泛型的好处


1.  将运行时期的ClassCastException,转移到了编译时期变成了编译失败。

2.  避免了类型强转的麻烦。


tips:泛型是数据类型的一部分,我们将类名与泛型合并一起看做数据类型。

3.3 泛型的定义与使用



泛型在定义的时候不具体,使用的时候才变得具体。在使用的时候确定泛型的具体数据类型。


        list.add("abc");

        list.add("itcast");

        // list.add(5);      //当集合明确类型后,存放类型不一致就会编译报错


修饰符 class 类名<代表泛型的变量> {  }


public class MyGenericClass<MVP> {

//没有MVP类型,在这里代表 未知的一种数据类型 未来传递什么就是什么类型   


         

静态方法也可以 加 泛型;调用静态方法用的是 类名点上 静态方法名,一般不用类new出来的对象点方法名

含有泛型的接口

定义格式:interface接口名<代表泛型的变量> {  }


实现含有泛型的接口,定义实现类的时候确定泛型的类型


接口使用什么泛型.实现类就实用什么泛型类型.跟着接口走!

就相当于是一个泛型的类,创建对象的时候确定泛型的类型


定义类时确定泛型的类型

定义格式:

修饰符 class 类名<代表泛型的变量> {  }


例如,API中的ArrayList集合:

泛型在定义的时候不具体,使用的时候才变得具体。在使用的时候确定泛型的具体数据类型。

在创建对象的时候确定泛型

例如,ArrayList<String> list = new ArrayList<String>();


泛型定义总结:

定义在类上的泛型:

有效范围: 整个类中都有效

何时确定具体类型: 创建该类对象时确定泛型的具体类型

定义在方法上的泛型:

有效范围: 方法中(包括返回值类型和参数类型)有效

何时确定具体类型: 调用方法传参时确定泛型的具体类型

定义在接口上的泛型:

有效范围: 接口中

何时确定具体类型:

1. 子接口或实现类定义时确定泛型的具体类型

2. 创建实现类对象时确定泛型的具体类型



3.4 泛型通配符

当使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以通过通配符<?>表示。但是一旦使用泛型的通配符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用。


泛型通配符:

不知道使用什么类型来接收时, 此时可以使用 <?> 来表示未知通配符

示例:List<?> list  接收泛型是任意类型的List对象

注意: 只能接收数据, 不能调用方法存储元素

List<?> list 这种集合不能调用 add() 添加元素, 只能调用 get() 获取元素

List<?> list 其实是一个变量, 所以可以将一个集合赋值给它

如:List<?> list = new ArrayList<String>();

使用方式:

不能创建对象使用

只能作为方法参数使用. (减少方法重载)



通配符基本使用

泛型的通配符:不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符。

此时只能接受数据,不能往该集合中存储数据。

通配符高级使用----受限泛型

泛型的上限:

格式:  类型名称 <? extends 类 > 对象名称

意义:  只能接收该类型及其子类


泛型的下限:

格式:  类型名称 <? super 类 > 对象名称

意义:  只能接收该类型及其父类型



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马