美文网首页
Java工具类、集合类、泛型编程

Java工具类、集合类、泛型编程

作者: 拜仁的月饼 | 来源:发表于2019-12-05 20:56 被阅读0次

要养成凡事查文档的习惯。文档地址如下:
Java API文档点击这里

1. Object类

这是所有类的直接或间接父类

1.1 equals方法

1.2 getClass方法

该方法和反射相关。

1.3 toString方法

1.4 finalize方法

1.5 包装类

1.6 Math

1.7 System

2. 字符串相关类

常用的字符串相关类有:

  • String类:创建后不可变动
  • StringBuffer类:
  • StringBuilder类:非线程安全,但效率高
  • StringTokenizer类:分割字符串类

3. 日期相关类

  • Calender
  • Date
  • SimpleDateFormat
  • java.time

4. Java数据结构

大部分数据结构继承自Collection接口及Maps接口。可以类比C++当中的STL。其实就是在Java中实现的一些数据结构,诸如队列、栈、哈希表、枚举等。下面逐一学习。

前面已经说过,在Java中数据结构需要调用的一个公共接口是Collection。其代码如下:

// 只列出常用方法
public interface Collection<E>{
    boolean add (E element);
    Iterator<E> iterator(); // 迭代
    int size();
    boolean isEmpty();
    boolean contains(Object obj);
    boolean containsAll(Collection<?> c);
    boolean equals(Object other);
    boolean addAll(Collection<? extends E> from T);
    boolean remove(Object obj);
    boolean removeAll(Collection<?> c);
    boolean retainAll(Collection<?> c);
    Object[] toArray();
    <T> T[] toArray(T[] arrayToFill);
}

从上面的代码可以看出,在Collection接口中还调用了Iterator接口。其实现如下:

public interface Iterator<E>{
    E next();
    boolean hasNext();
    void remome();
    default void forEachRemaining(Consumer<? super E> action);
}

在集合类型中可以通过重复调用next()方法来遍历所有元素。在遍历完成后再调用next()方法会抛出一个NoSuchElementExceptiom错误,所以在调用next()方法以前你需要预先调用hasNext()方法来检查一下。

那么,在Java中的for each语法是如何实现的呢?通过Iterable接口。

public interface Iterable<E>{
    Iterator<E> iterator();
}

另一个公共接口是MapMap是一种“键值对”数据类型,它的方法如下:

// 仅列一些常用方法
public interface Set<K, V>{
    V put(K key, V value);
    V get(K key);
}

ListCollection的一个常用派生接口。常用方法有:

public interface List<E> implements Collection{
    void add(int index, E element);
    void remove(int index);
    E get(index);

}

4.1 队列Queue

在Java中未有实现的队列接口代码如下:

public interface Queue<E>{ // 很明显,这是一个泛型
    void add (E element); // 添加元素
    E remove(); // 删除元素
    int size();
}

Java中队列实现有两种方式:

  • circular array
  • linked list(链表)

但一般情况下不需要自己实现一遍,直接用Queue泛型类即可。如果想要Circular Array实现的queue,调用ArrayDeque类型;如果想要链表实现的队列,调用LinkedList就行了,它本身就已经调用了Queue接口。

4.2 Collection包中的接口

5. Generic:泛型编程

理解:针对不同的类有相同的处理方法。

泛型的继承规则

案例来自《Java核心技术(Core Java)》。

设定ManagerEmployee的子类。那么,在泛型中,Pair<Manager>是否为Pair<Employee>的类?完全无关的两个类

两个泛型类其实无关

观察下面一段代码:

    Manager[] topHonchos = {"Ban", "ZZY", "Susan"};
    Pair<Employee> result = ArrayAlg.minmax(topHonchos); // 错误!

如上所言,尖括号中的Employee并不代表它此时就是Pair<Manager>父类。

那么,如何在泛型中体现出继承关系呢?

这个时候就需要用到Wildcard Type了。

Wildcard Types

由于我读的是英文原版,所以没找到合适的翻译。故暂时翻译为外卡类

外卡类的两种表现形式:

  • 由上向下继承:Pair<? extends Employee>
  • 由下向上继承:Pair<? super Employee>

相关文章

  • Java工具类、集合类、泛型编程

    要养成凡事查文档的习惯。文档地址如下:Java API文档点击这里 1. Object类 这是所有类的直接或间接父...

  • Java高级技术小结(week13)

    集合框架和泛型 实用类(包装类, Math, String大类, java.util<日期时间, Random>)...

  • Java泛型

    参考:Java知识点总结(Java泛型) 自定义泛型类 自定义泛型接口 非泛型类中定义泛型方法 继承泛型类 通配符...

  • JDK1.5后增加了泛型,那么为什么要有泛型呢?我们该如何自定义

    本篇主要讲解java泛型的理解、集合中简单使用泛型、自定义泛型结构(包括类、接口、方法)。 一、什么是泛型? 通俗...

  • 2018-12-21

    Day10 Collection、泛型类 1.Collection集合 1.1 集合的概述 集合是java中提供的...

  • JAVA泛型理解

    具有一个或多个类型变量的类称之为泛型类!泛型概述泛型是JDK5.0新特性,它主要应用在集合类上。有了泛型之后,集合...

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • java 高级特性之泛型

    一. Java 中的泛型 Java 5 中添加了泛型,用以编译时类型检查,借此消除使用集合类时常见的ClassCa...

  • 想理解泛型吗?看这一篇就够了!

    一、前言二、泛型类2.1 概述Java中泛型使用情况大致包括三种:泛型类、泛型接口、泛型方法 本节演示泛型类。 2...

  • 泛型(jdk5.0新特性)

    在集合中使用泛型 1、集合接口或集合类在jdk5.0时都修改为带泛型的结构2、在实例化集合类时,可以指明具体的泛型...

网友评论

      本文标题:Java工具类、集合类、泛型编程

      本文链接:https://www.haomeiwen.com/subject/gbigwctx.html