IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java学习:从入门到精通week3 -> 正文阅读

[Java知识库]Java学习:从入门到精通week3


?

一.Object类、常用API

?概述

java.lang.Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。

如果一个类没有特别指定父类, 那么默认则继承自Object类。

1.object类?

1.1toString方法

1.2equals方法

?object中的equals方法(容忍null)

?2.date类

2.1几个常用方法

public class Date {
    public static void main(String[] args) {
        System.out.println(System.currentTimeMillis());//获取当前日期到1970年1月1日00.00.00经历了多少毫秒
        demo();

    }
    //date类中常用的成员方法和构造方法
    public static void demo() {
        Date date1 = new Date();//打印出当前日期
        System.out.println(date1);
        Date date2=new Date(0L);//把毫秒值传递成日期
        System.out.println(date2);
        long date3.getTime();//相当于System.currentTimeMillis()方法
        System.out.println(date3);



    }
}

?2.1DeteFormat类(抽象类)

?

?1)String?format(Date?date)

2)Date?parse(String?source)

?

?3.Calendar类(抽象类)

3.1设置日期

1)获取日期

2)设置日期

?3)增加/减少?日期

?4.System类

4.1获取毫秒

?4.2数组的复制

?

?

?与我们说所的复制不同,其实是将数组对于索引位置覆盖在另一个数组上面。

5. StringBuilder类?

java.lang.StringBuilder的API,StringBuilder又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。

原来StringBuilder是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。

?

?5.1StringBuilder的使用

1)构造方法

?2)成员方法

public?StringBuilder?append(....)添加任意类型数据的字符串形式,并返回当前对象自身。

?有兴趣可以试试链式编程。

?public?StringBuilder?toString()

?6.包装类

6.1概述

Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下:

?6.2装箱与拆箱

?在使用构造方法时会出现横线划掉Interger,说明方法过时了。

如果用Integer方法放置字符,则会报错:

6.3自动拆箱和自动装箱?

由于我们经常要做基本类型与包装类之间的转换,从Java 5(JDK 1.5)开始,基本类型与包装类的装箱、拆箱动作可以自动完成。例如:

?6.4基本类型和字符串类型的转换

1)基本数据-->字符串

这里只写最常用的方法:

?其实就是令100变成“100”

?2)字符串-->基本数据类型

其他类型其实就是:

基本数据类型? 用户标识符? =? ?对应包装类.parse+数据类型(原字符串对象名称) ,如

short? a =?Short.parseByte? (基本数据类型首字母大写

二.Collection、泛型

1.Collection集合

1.1概述

  • 集合:集合是java中提供的一种容器,可以用来存储多个数据,集合与数组的差别:

  • 数组的长度是固定的。集合的长度是可变的。

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

1.2集合框架

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

  • Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.Listjava.util.Set。其中,List的特点是元素有序、元素可重复。Set的特点是元素无序,而且不可重复。List接口的主要实现类有java.util.ArrayListjava.util.LinkedListSet接口的主要实现类有java.util.HashSetjava.util.TreeSet

?1.3Collection的常用功能

共性方法:

创建对象

? 此处使用多态,如果后面是Hashset等其他类,也可以继续使用。

?1)添加(返回类型boolean)

应该注意的是,此处的coll为字符串数组,即为“李四”,“张三”,“赵六”,“田七”四个字符串构成的字符串数组,若在后面删除李”四赵六”,则返回的是false。

2)删除(返回类型boolean)

?3)判断是否包含元素(返回类型boolean)

?4)判断集合是否为空(返回类型为boolean)

5)返回集合个数(int)?

6)存储集合元素到数组

?7)清空集合元素

8)获取索引位置对于的字符串

//public String get();

  String a=coll.get(0);
  System.out.println(a);

?2.Iterator迭代器

2.1概念

  • 迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。

2.2迭代器的方法

?2.3迭代器的使用

public class IteratorDemo {
  	public static void main(String[] args) {
        // 使用多态方式 创建对象
        Collection<String> coll = new ArrayList<String>();

        // 添加元素到集合
        coll.add("串串星人");
        coll.add("吐槽星人");
        coll.add("汪星人");
        //遍历
        //使用迭代器 遍历   每个集合对象都有自己的迭代器
        Iterator<String> it = coll.iterator();
        //  泛型指的是 迭代出 元素的数据类型
        while(it.hasNext()){ //判断是否有迭代元素
            String s = it.next();//获取迭代出的元素
            System.out.println(s);
        }
  	}
}

?

3.增强for循环

增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。

3.1遍历数组

public class NBForDemo1 {
    public static void main(String[] args) {
		int[] arr = {3,5,6,87};
       	//使用增强for遍历数组
		for(int a : arr){//a代表数组中的每个元素
			System.out.println(a);
		}
	}
}

3.2遍历集合

public class NBFor {
    public static void main(String[] args) {        
    	Collection<String> coll = new ArrayList<String>();
    	coll.add("小河神");
    	coll.add("老河神");
    	coll.add("神婆");
    	//使用增强for遍历
    	for(String s :coll){//接收变量s代表 代表被遍历到的集合元素
    		System.out.println(s);
    	}
	}
}

4.泛型

4.1概述

?在前面学习集合时,我们都知道集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换。

? ? ? ? ?我们来分析下:由于集合中什么类型的元素都可以存储。导致取出时强转引发运行时?报错ClassCastException。 怎么来解决这个问题呢?

Collection虽然可以存储各种对象,但实际上通常Collection只存储同一类型对象。例如都是存储字符串对象。因此在JDK5之后,新增了泛型(Generic)语法,让你在设计API时可以指定类或方法支持泛型,这样我们使用API的时候也变得更为简洁,并得到了编译时期的语法检查。

  • 泛型:可以在类或方法中预支地使用未知的类型。

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

4.2 使用泛型的好处

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

  • 避免了类型强转的麻烦。

?4.3?泛型的定义与使用

?eg:首先定义一个含有泛型的类

使用这个类

?

4.4定义含有泛型的方法

eg:?定义泛型方法

?

泛型方法的使用

?4.5含有泛型的接口

使用格式 (实现类)

1)已经确定泛型的类型

?2)始终不确定泛型的类型,直到创建对象时,确定泛型的类型

测试类?

?4.6泛型的通配符

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

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

之前设置泛型的时候,实际上是可以任意设置的,只要是类就可以设置。但是在JAVA的泛型中可以指定一个泛型的上限下限

泛型的上限

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

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

泛型的下限

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

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

?比如:现已知Object类,String 类,Number类,Integer类,其中Number是Integer的父类。

?

三.List、Set、数据结构、Collections

?1.数据结构(与集合相关)#了解

1.1数据结构的作用

当你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,也好像链表之类的。好用吗?好用,这就是数据结构的用处,只不过你在不知不觉中使用了。

现实世界的存储,我们使用的工具和建模。每种数据结构有自己的优点和缺点,想想如果Google的数据用的是数组的存储,我们还能方便地查询到所需要的数据吗?而算法,在这么多的数据中如何做到最快的插入,查找,删除,也是在追求更快。

我们java是面向对象的语言,就好似自动档轿车,C语言好似手动档吉普。数据结构呢?是变速箱的工作原理。你完全可以不知道变速箱怎样工作,就把自动档的车子从 A点 开到 B点,而且未必就比懂得的人慢。写程序这件事,和开车一样,经验可以起到很大作用,但如果你不知道底层是怎么工作的,就永远只能开车,既不会修车,也不能造车。当然了,数据结构内容比较多,细细的学起来也是相对费功夫的,不可能达到一蹴而就。我们将常见的数据结构:堆栈、队列、数组、链表和红黑树 这几种给大家介绍一下,作为数据结构的入门,了解一下它们的特点即可。

1.2常见的数据结构

数据存储的常用结构有:栈、队列、数组、链表和红黑树。

1)栈

  • stack,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。

简单的说:采用该结构的集合,对元素的存取有如下的特点

  • 先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)。例如,子弹压进弹夹,先压进去的子弹在下面,后压进去的子弹在上面,当开枪时,先弹出上面的子弹,然后才能弹出下面的子弹。

  • 栈的入口、出口的都是栈的顶端位置。

注意两个名词:

2)队列

  • 压栈:就是存元素。即,把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。

  • 弹栈:就是取元素。即,把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。

  • 队列queue,简称队,它同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。

简单的说,采用该结构的集合,对元素的存取有如下的特点:

  • 先进先出(即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素)。例如,小火车过山洞,车头先进去,车尾后进去;车头先出来,车尾后出来。

  • 队列的入口、出口各占一侧。例如,下图中的左侧为入口,右侧为出口。

?3)数组

  • 数组:Array,是有序的元素序列,数组是在内存中开辟一段连续的空间,并在此空间存放元素。就像是一排出租屋,有100个房间,从001到100每个房间都有固定编号,通过编号就可以快速找到租房子的人。

简单的说,采用该结构的集合,对元素的存取有如下的特点:

  • 查找元素:通过索引,可以快速访问指定位置的元素

  • 增删元素

?4)链表

链表:linked list,由一系列结点node(链表中每一个元素称为结点)组成,结点可以在运行时i动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。我们常说的链表结构有单向链表与双向链表 。

特点?

  • ?查找慢

  • 增删快

5)红黑树

二叉树binary tree ,是每个结点不超过2的有序树(tree

简单的理解,就是一种类似于我们生活中树的结构,只不过每个结点上都最多只能有两个子结点。

二叉树是每个节点最多有两个子树的树结构。顶上的叫根结点,两边被称作“左子树”和“右子树”。

?红黑树本身就是一颗二叉查找树,将节点插入后,该树仍然是一颗二叉查找树。也就意味着,树的键值仍然是有序的。

2.List集合

2.1概述和特点

2.2方法?

?1)指定位置添加元素(返回值类型void)

?2)指定位置删除元素(返回值类型E)

3)指定位置替换元素?(返回值类型E)

?4)List的遍历

?增强for遍历快捷方式:List.for回车

?如获取索引位置大于数组最大索引,会报错。

2.3ArrayList类

java.util.ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。

许多程序员开发时非常随意地使用ArrayList完成任何需求,并不严谨,这种用法是不提倡的。

当查询较多时,推荐使用ArrayList。

2.4 LinkedList集合

概述:

?方法的使用,先创建对象(了解)

?1)添加元素

2)获取元素

?3)判断是否为空集

?4)移除并返回元素

?

#Vector类,作为了解,已被淘汰。


3.Set类?

3.1概述

java.util.Set接口和java.util.List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了。与List接口不同的是,Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复 。

`Set`集合有多个子类,这里介绍其中的`java.util.HashSet`、`java.util.LinkedHashSet`两个集合。

3.2HashSet集合

java.util.HashSetSet接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致)。java.util.HashSet底层的实现其实是一个java.util.HashMap支持 。

此处说明了不能储存重复元素的特点。?

3.3 HashSet集合存储数据的结构(哈希表)

哈希值:

是一个十进制的整数 由系统随机给出(是一个模拟出来的地址值,不是真的物理地址值)也是地址值的十进制? ?(?地址值是十六进制)

方法的使用:

?

?将p1,p2打印出来分别是他们哈希值对应的16进制。

?哈希表

?

?3.4Set集合不允许储存重复元素的原理

?

?总结

3.5 HashSet存储自定义类型元素

eg

?

如下列所示

import java.util.Objects;

public class Person {
    String name;
    Integer age;

    public Person() {
    }

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return Objects.equals(name, person.name) &&
                Objects.equals(age, person.age);
    }

    @Override
    public int hashCode() {

        return Objects.hash(name, age);
    }

4.LinkedHashSet类

4.1概述

?HashSet的无序性

?无论先添加“www”,还是“abc”,打印结果都不变,说明无序性。

4.2LinkedHashSet的有序性

?打印结果与顺序相关。

5.可变参数

5.1概述及格式

数组在参数创建时同时创建。

eg?

int i=add();//空参调用

?

5.2注意事项:

?6.Collections工具类

6.1概述和部分方法

?6.2使用

1)添加多个元素

Comparable

?2)排序(默认为升序)

?3)自定义类型排序

Person类(自定义类型)?

?

this-形式参数?升序

形式参数-this?降序

测试类?

?

?打印出结果

?

?实现了升序排序。

Comparator

?在使用Comparator进行排序是需要重写里面的方法

?打印结果按照年龄升序排序。

总结:

Comparable接口,在自定义类(实现类)中重写compareTo方法

Comparator接口,在测试类中重写compare方法。

简述Comparable和Comparator两个接口的区别。

Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。

Comparator强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。

四.Map

1.Map集合

1.1概述

现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即java.util.Map接口。

我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图

?

1.2Map集合常用实现类?

HashMap

LinkedHashMap

?1.3Map接口中的常用方法

1)存储

?

?value允许重复。

2)删除

?3)获取

?4)查询集合是否包含key(返回值类型是Boolean

?1.4Map集合遍历的键找值方式

1.5Entry键值对对象

我们已经知道,Map中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在Map中是一一对应关系,这一对对象又称做Map中的一个Entry(项)Entry将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值。 ?

Map集合遍历键值对方式

?1.6HashMap存储自定义类型键值

1)V为自定义类

?

?2)K为自定义类

?

?1.7LinkedHashMap集合(继承HashiMap)

与HashSet和LinkedHashMap一样,存在顺序关系,前者无序,后者有序。

1.8Hashtable集合

?

?2.补充

?

此时的集合个数已经确定,再用add()方法添加的话,报错:不支持操作。?

三种集合使用of()方法后都不允许再次添加元素。

?Set和Map不允许重复元素出现。报错:非法参数异常。

3.Debug追踪

?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-04 11:03:50  更:2021-08-04 11:05:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 7:33:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码