java笔记6java.util包

  • Arrays类:提供了一些方法用于排序、查找等操作,在编制程序中可以直接使用这些方法。
    • 排序:在编制程序中可以直接使用类Arraus提供的某个sort方法,来对数组排序,sort使用形式:public static void sort(Xxx a[]),该方法用改进的快速排序方法对指定的而数组a进行排序,其中数组a是类型为char、short、int、long、float、double、boolean的数组;sort方法还有另外一种形式:public static void sort(Xxx a[],int fromIndex,int toIndex),这种形式只对数组a指定范围[fromIdex, toIndex)内的元素排序。
    • 查找public static int binarySerach(Xxx a[],Xxx v)该方法用折半查找算法在指定的数组a查找值为v的元素,其中a元素的类型为基本数据类型。找到则返回下标,没有匹配的则返回一个负值。
    • 填充public static void fill(Xxx a[],Sxx v)该方法用指定的指定值v来填充数组a,执行该方法的结果是:数组a中所有的元素值都变成v,a的元素为基本数据类型。
  • Date类:Date 类表示日期和时间;用于表示特定的时间点,精确到毫秒,但不支持日期的国际化和分区显示;Date 类的最佳应用之一是获取系统当前时间。

    构造方法

    说明

    Date() 使用当天的日期创建Date
    Date(long dt) 使用自1970年1月1日以后的指定毫秒数创建Date
    getTime() 从Date对象获取时间
  • Calendar类:根据给定的Date对象,Calendar类可以以YEAR和MONTH等整数形式检索信息,提供了常规的日期修改功能和国际化支持;它是抽象的,因此不能像Date类一样实例化,可以使用Calendar类的静态方法getInstance()获得该类的实例。然后访问该类的静态属性YEAR,MONTH,DATE,HOUR,MINUTE,SECOND就可以获得相应的时间部分;Calendar.add(int component,int mount)方法还可以在当前时间上加上一定时间,Calendar.getTime()方法会返回当前时间的Date对象。GregorianCalendar是Calendar的子类,实现了Gregorian形式的日历。Calendar.MONTH为什么小一个月呢?
  • 相关类java.text.DateFormat类:它也是抽象的,同样可以使用getInstance()方法获得该类的实例。该类有静SHORT,MEIDUM,LONG,FULL静态属性,可作为getInstance的参数以生成特定的DateFormat对象,再通过DateFormat的format(Date date)函数既可以通过特定格式输出日期,以上属性克分别输出如下格式,默认为MEDIUM:
    • 10-8-4
      2010-8-4
      2010年8月4日
      2010年8月4日 星期三
  • Random类:此类生成随机数,两种构造方法:Random(long seed)使用种子值作为参数;Random()没有参数。方法有:nextInt();nextFloat();nextDouble();nextBoolean();nextLong();nextInt(int a)会产生[0,a)的随机数
  • 容器API:容器:Java API所提供的一系列类的实例,用于在程序中存放对象;容器API的类图结构如下所示:java笔记6java.util包_第1张图片Collection接口:定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式;
    • Set中的数据对象没有顺序且不可以重复;
    • List中的数据对象有顺序且可以重复;
    • Java SDK不提供直接实现自Collection的类,Java SDK提供的类都是实现自Collection的“子接口”如List和Set。

所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数;有一个Collection参数的构造函数创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。
Map接口定义了存储“键(key) — 值(value)映射对”的方法;
Collection对象是将多个元素组成一个单元的对象;集合用于存储、检索和操纵数据;集合框架是用于表示和操纵集合的统一体系结构.集合框架包含三个组件:接口(是表示集合的抽象数据类型);算法(是对实现接口的对象执行计算的方法);实现(是接口的实际实现)
集合框架的优点:
提供有用的数据结构和算法,从而减少编程工作
提高了程序速度和质量,因为它提供了高性能的数据结构和算法
允许不同 API 之间的互操作,API之间可以来回传递集合
可以方便地扩展或改写集

int size() 返回元素数目
boolean isEmpty() 判断是否为空
void clear() 清空
boolean contains(Object element) 判断是否包含指定的元素
boolean add(Object element) 添加指定元素
boolean remove(Object element) 移除指定元素
Iterator iterator() 返回此Collection上的迭代器
boolean containsAll(Collection c) 是否包含c中全部元素
boolean addAll(Collection c) Set中为取并集
boolean remobeAll(Collection c) Set中为取差集
boolean retainAll(Collection c) Set中为取交集
Object[] toArray() 转换为数组

容器类对象在调用remove、contains等方法时需要比较对象是否相等,这会涉及到对象类型的equals方法和hashCode方法;对于自定义的类型,需要重写这两个方法以实现自定义的对象相等规则;
注意:相等对象应该具有相等的hashCode;

Iterator接口:

  • 所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象;
  • Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作;
  • Iterator接口定义了如下方法:
    boolean hasNext(); 判断游标右边是否有元素
    Object next();返回游标右边元素并移动到下一个位置
    void remove();在执行完next之后,删除游标左面的元素,该操作只能执行一次;Iterator对象的remove方法是在迭代过程中删除元素的唯一的安全方法,若用Collection对象的remove方法则会产生异常。
  • 增强的for循环:强的for循环对于遍历array或Collection的时候相当简便,除了简单遍历并读出其中的内容外,不建议使用增强for

set接口:

  • Set接口是Collection的子接口,Set接口没有提供额外的方法,但实现Set接口的容器类中的元素是没有顺序的,而且不可以重复。即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。Set没有引入新的方法。
  • Set容器可以与数学中“集合”的概念相对应。
  • JDK API中所提供的Set容器类有HashSet,TreeSet等。
  • HashSet是以哈希表存储的集合,可以优化查询速度,加入其中的元素必须实现equals和hashCode方法

List接口:

  • List接口是Collection的子接口,实现List接口的容器类中的元素是有顺序的,而且可以重复
  • List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。
  • JDK所提供的List容器类有ArrayList、LinkedList等;
  • ArrayList:ArrayList 对象是长度可变的对象引用数组,类似于动态数组;继承 AbstractList 并实现 List 接口;随着元素的添加,元素的数目会增加,列表也会随着扩展;访问和遍历对象时,它提供更好的性能
    ArrayList() 创建一个空ArrayList
    ArrayList(Collection c) 根据给定集合的元素创建数组列表
    ArrayList(int size) 使用给定大小床架一个数组列表。向数组列表添加元素时,此大小自动增加
    Object get(int index) 返回指定位置的元素
    Object set(int index,Object element) 在指定位置上设置元素并返回旧元素
    void add(int index,Object element) 把后面的元素往后挤一格
    Object remove(int index) 删掉指定下标的元素
    int indexOf(Object o) 返回指定元素第一次出现的下标,没有时返回-1
    int lastIndexOf(Object o) 返回指定元素最后一次出现的下标,没有时返回-1
  • LinkedList:LinkedList 类用于创建链表数据结构;继承 AbstractSequentialList 并实现 List 接口;LinkedList 类的构造方法包括:LinkList()创建一个空链表,LinkedList(Collection c)根据给定集合的元素创建链表;使用LinkedList的好处在于它具有访问、检索和删除数据的方法;添加或移除对象时,LinkedList的表现更加
  • 常用算法:类java.util.Collections(一个类)提供了一些静态方法实现了基于List容器的一些常用算法:
    void sort(List) 对List容器内的元素排序
    void shuffle(List) 对List容器内的对象进行随机排列
    void reverse(List) 对List容器内的对象进行逆序排列
    void fill(List,Object) 用一个特定的对象重写整个List容器
    void copy(List dest,List src) 将src List容器内容拷贝到dest容器
    int binarySearch(List,Object) 对于顺序的List容器,采用折半查找的方法查找特定对象

    Comparable接口:所有可以“排序”的类都实现了java.lang.Comaprable接口,Comparable接口中只有一个方法:public int compareTo(Object obj)
    该方法:
    返回 0     表示 this == obj
    返回 正数  表示 this > obj
    返回 负数  表示 this < obj
    实现了Comparable接口的类通过实现compareTo方法从而确定该类对象的排序方式

    Map接口:

    实现Map接口的类用来存储键-值对,键可以作为索引
    Map接口的实现类有HashMap和TreeMap等
    Map类中存储的键-值对通过键来标识,所以键的值不能重复

    Object put(Object key,Object value) 将指定的值与指定的键联系
    Object get(Object key) 返回指定键对应的值,没有返回空
    Object remove(Object key) 删除指定键的映射
    boolean containsKey(Object key) 返回是否包含指定键
    boolean containsValue(Object value) 返回是否包含一个或多个指定值
    int size() 返回键值对的数目
    boolean isEmpty() 若没有键值对的话返回true
    void putAll(map t) 将指定映射图中的所有
    void clear() 删除所有映射
    HashMap:实现了Map接口;用于存储键/值映射关系;不能保证其元素的存储顺序。它在存放键值时允许值为null
    HashMap() 创建一个具有默认容量和负载系数的空映射
    HashMap(int size) 创建一个具有指定大小和默认负载系数的空映射
    HashMap(int size,float load) 创建一个具有指定的容量和指定的负载系数的空映射
    HashMap(Map map) 创建一个具有指定map映射的散列映射

Vector类:它具有类似数组的数据结构,而且是动态的;可以存放一定数量的元素;容量可以递增。原始数据类型不能添加到Vector中

Vector() 创建一个空Vector
Vector(int initialCap) 创建一个空Vector,其初始大小由initialCap指定,容量增量为0
Vector(int initialCap,int inc) 创建一个空Vector,其初始大小由initialCap指定,容量增量由inc指定
Vector(Collection c) 创建一个包含给定集合元素的新Vector,元素顺序为集合迭代器返回的顺序
void addElement() 将指定成分加入到向量末尾,向量大小加1
insertElementAt(object o,int index) 将指定对象作为向量的元素插入到指定位置
indexOf(Object o) 返回向量中第一次出现指定元素的索引,没有返回-1
firstElement() 返回向量的第一个元素(索引为0的项)
capacity() 返回向量当前容量
lastElement() 返回向量的最后一个元素

其他:

  • 如何选择数据结构:衡量标准:读的效率和改的效率
    Array读快改慢
    Linked改快读慢
    Hash两者之间:Hashtable、Vector等属于以前遗留的,不推荐使用,内部有锁定机制,效率低。一般常用Set、List和Map
  • JDK1.5新增的特性:Auto-boxing/unboxing
    在合适的时机自动打包、解包
    自动将基础类型转换为对象
    自动将对象转换为基础类型
  • JDK1.5 泛型:起因:
    JDK1.4以前类型不明确:
    装入集合的类型都被当作Object对待,从而失去自己的实际类型
    从集合中取出时往往需要转型,效率低,容易产生错误。
    解决办法:
    在定义集合的时候同时定义集合中对象的类型
    可以在定义Collection的时候指定
    也可以在循环时用Iterator指定
    注意:在这两个地方都指定最好
    好处:增强程序的可读性和稳定性
    并不是所有的类都可以使用泛型,查看API文档,只要类的后面跟着<>,则说明该类支持泛型

你可能感兴趣的:(java笔记6java.util包)