码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础(五)

时间:2018-05-03 22:10:16      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:Java基础   集合   

(一)对象数组
(1) 存储对象的一个数组

Student[] student = new Student[5] ;

Arrays:针对数组操作的工具类 (提供了一些针对数组排序和二分搜索法)
public static String toString(int[] a):可以将int类型的数组转换成字符串 ([元素1,元素2,元素3...])
public static void sort(int[] a)对指定的 int 型数组按数字升序进行排序
public static int binarySearch(int[] a,int key):二分搜索法: 在int类型的数组中查找key元素的索引
(2)注意:
在实际开发中,只要有引用类型,在对引用类型数据进行操作的时候,对引用类型的对象进行非空判断,防止空指针异常(NullPointerException)。

**(二)   Calendar类**
(1)Calendar类:日历类

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,
并为操作日历字段(例如获得下星期的日期)提供了一些方法

                 是一个抽象类,如何实例化?
  • public static Calendar getInstance() :通过一个静态功能来创建日历了对象
    *ate类:(重点)
    (2) alendar中的两个常用方法:
  • public abstract void add(int field,int amount)根据日历的规则,为给定的日历字段添加或减去指定的时间量 (这个方法常用)

  • public final void set(int year, int month,int date)设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
    (三)System类
    System 类包含一些有用的类字段和方法。它不能被实例化。

    常用的方法:
    public static void gc()运行垃圾回收器。
    public static void exit(int status)终止当前正在运行的 Java 虚拟机。参数用作状态码; 一般情况,需要终止
    Jvm,那么参数0
    public static long currentTimeMillis()返回以毫秒为单位的当前时间

     public static void arraycopy(Object src,int srcPos, Object dest,int destPos, int length)

    从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
    src:原数组
    dest:目标数组
    srcPos :从原数组的哪个位置开始
    destPos:到目标数组的哪个位置结束
    length:长度
    (四)Date类
    (1)java.util.Date:
    类 Date 表示特定的瞬间,精确到毫秒

    (2) 构造方法:

  • public Date()表示分配它的时间(精确到毫秒)。
  • public Date(long date):创建一个日期对象,指定毫秒值 (需要将long 时间毫秒值转换成Date对象)
  • public void setTime(long time):设置毫秒值
  • public long getTime()
    将Date类型的数据转换为long的毫秒值
    重点:Date的日期格式和日期的文本格式:String类型 之间进行转换
  • (3)Date类型与String类型转换
    Date---->String(格式化)

                 String-->Date(解析)

    中间的转换:使用中一个中间类:DateFormat,并且DateFormat是一个抽象类,抽象意味着不能实例化,所以应该考虑用它的子类:
    SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。

    SimpelDateFormat的构造方法:

  • public SimpleDateFormat(String pattern) :构造一个SimpleDateFormat对象,根据pattern(模式:规则)

  • SimpleDateFormat sdf = new SimpleDateFormat("xxx年xx月xx日") ;
    日期和时间模式
  • 年: yyyy
  • 月: MM
  • 日: dd
  • 时: hh
  • 分: mm
  • 秒: ss
  • 实际开发中:牵扯时间的东西,经常Date--String String--Date

    (五)Math类
    (1)Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
    (2)常用的方法:

  • public static int abs(int a):绝对值
  • public static double ceil(double a):向上取整
  • public static double floor(double a):向下取整
  • public static int max(int a,int b):求最大值
  • public static int min(int a,int b):求最小值
  • public static double pow(double a,double b):a的b次幂
  • public static double random()返回带正号的 double 值,该值大于等于 0.0 且小于 1.0
  • public static int round(float a):四射五入
  • public static double sqrt(double a):一个数的正平方根
  •                                  JDK5的特性:静态导入(导入方法的级别)
    **(六)Random类**
        (1)     Random:是一个可以获取随机数的类

    (2)构造方法
    public Random():无参构造方法
    public Random(long seed) :指定long类型的数据进行构造随机数类对象

  • *public int nextInt():获取随机数,它的范围是在int类型范围之内

  • *public int nextInt(int n):获取随机数,它的范围是在[0,n)之间
    (七)正则表达式
    (1)正则表达式的语法:
    字符

    x ---------------------> x字符
    \ --------------------- > 反斜线字符
    \t --------------------->制表符
    \n ---------------------> 换行符
    \r ---------------------> 回车符

字符类:
[abc] ---------------------> a、b 或 c(简单类)
[^abc] ---------------------> 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] --------------------->a 到 z 或 A 到 Z,两头的字母包括在内(范围)

预定义字符类:
. ---------------------> 任何字符 如果本身就是. . qq.com 写正则表达式(\.)
\d --------------------->数字:[0-9] 写正则表达式 :\d
\w ---------------------> 单词字符:[a-zA-Z_0-9]:字母大小写,数字字符 \w

边界匹配器:
^ --------------------->行的开头
$ ---------------------> 行的结尾
\b --------------------->单词边界 尾 (helloword?haha:world)

Greedy 数量词(重点)
X? ---------------------> X,一次或一次也没有
X* ---------------------> X,零次或多次
X+ ---------------------> X,一次或多次
X{n} ---------------------> X字符恰好出现n次
X{n,} ---------------------> X字符至少出现n次
X{n,m} ---------------------> X字符至少出现n次,但不超过m次
例:
import java.util.Scanner;

自己校验:手机号码
定义规则:
136....
13689257284
13688886666
....

public class RegexDemo3 {

public static void main(String[] args) {

    //创建键盘录入对象

    Scanner sc = new Scanner(System.in) ;

    //接收数据
    System.out.println("请输入一个手机号码:");
    String phone = sc.nextLine() ;

    //定义正则规则
    String regex = "1[36]\\d{9}" ;

    boolean flag = phone.matches(regex) ;
    System.out.println(flag);
}

}
(2)方法:

  • public String[] split(String regex) :字符串的分割功能

        按照指定的格式进行分割,分割后返回的是一个字符串数组
  • public String replaceAll(String regex,String replacement)
    使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
    (八)集合
    (1)集合的由来?
    学生的面向对象语言,面向对象语言对事物的描述是通过对象体现的,那么需求需要来存储多个对象.
    要存储多个对象,不能使用基本类型的变量,需要使用容器类型的变量? 学习过哪些容器变量?
    数组 ,字符串缓冲区(StringBuffer)
    对于字符串缓冲区来说,在内存中始终存储的是字符串,不能满足要求;数组呢,数组的长度是固定的,不符合长度编号的要求,所有Java提供了一个
    (2)Collection 集合;

    集合:Collection:子接口有两个,两个子接口分别对应多个子实现类,多个集合数据结构不同,但是他们有共性内容,将共性内容
    抽取出来,就可以集合继承体系图!

    数据结构:数据的存储方式

    Collection:
    Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。
    JDK 不提供此接口的任何直接 实现:它提供更具体的子接口,更具体的实现类
    (3) 基本功能:
    添加功能:
    boolean add(Object e)
    删除功能:
    void clear() :删除集合中所有元素(暴力删除)
    boolean remove(Object o):删除集合中的指定元素
    判断功能:
    boolean contains(Object o):集合中是否包含指定的元素
    获取功能:
    int size() :获取集合中的元素数

    转换功能:
    Object[] toArray() :将集合转换成数组
    (4)Colleciton的集合的高级功能:

    • boolean addAll(Collection c) :添加一个集合中的所有元素
    • boolean removeAll(Collection c):删除的高级功能(思考:删除一个算是删除还是删除所有算是删除?)
      删除一个算删除
    • boolean containsAll(Collection c):包含所有元素算是包含,还是包含一个算是包含
    • boolean retainAll(Collection c) :交集功能: A集合对B集合取交集元素 :思考
      boolean 表达的是什么意思,交集的元素是去A集合还是去B集合中
      A集合对B集合取交集,交集的元素要去A集合中,boolean返回值表达的A集合的元素是否发生变化,如果发生变化,则返回true,否则,返回false
      (5)迭代器
      1) Iterator iterator() :集合的迭代器方法(获取集合的迭代器)

    集合的专有遍历方式:迭代器遍历

        2)Iterator :接口中有以下的方法:
    • boolean hasNext() :如果有元素可以迭代,那么返回true,否则返回false
    • Object next()返回迭代的下一个元素。
      存储String类型的元素
      3) 注意:
      it.next(),只使用一次即可,使用多次,会出现问题(it.next(),每次使用的时候都是返回一个对象)
      遍历的时候使用的while循环,可不可以使用for循环呢?
      可以,不过很少用。
      (6)List集合
      1)interface extends Collection{
      就可以使用Collection集合的功能
      }

                  Collection有两个子接口:List       Set
              2)List
              List集合的特有功能:

      添加功能
      void add(int index,Object element):在指定位置处添加指定元素
      获取功能
      Object get(int index)返回列表中指定位置的元素。
      ListIterator listIterator():列表迭代器
      删除功能:
      Object remove(int index):删除指定位置处的元素
      修改功能
      Object set(int index, Object element):用指定element元素替换掉指定位置处的元素
      3)方法
      ListIterator listIterator():列表迭代器 (List集合的专有迭代遍历:列表迭代器)
      ListIterator接口中:

    • boolean hasNext() :判断是否有下一个可以迭代的元素(正向遍历)
    • Object next():获取下一个元素
    • boolean hasPrevious():判断是否有上一个可以迭代 元素(逆向遍历)
    • Object previous():返回上一个元素

    逆向迭代(遍历),单独使用没意义,前提,要先正向遍历
    4)两种遍历方式
    存储自定义对象并遍历,两种方式

    • 方式1:Iterator iterator();
    • 方式2:size()和get()方法相结合
      5) ist集合有三个子实现类:

      ArrayList
              底层数据结构式数组结构,查询块,增删慢
              从内存角度考虑:线程不安全的,不同步的,执行效率高
      
              多线程:synchronized :同步的意思     解决线程安全问题
                      sychronized(锁对象){   同步代码 
                              共享数据;   
                      }
      
              解决线程安全问题,通过同步可以解决,但是效率低了...
      
      LinkedList
              :底层数据结构式链表结构,查询慢,增删块
              从内存角度考虑:线程不安全,不同步,执行效率高
      
      Vector:
              这是一个线程安全的类,
              底层数据结构是数组:查询快,增删慢
              线程安全的,同步,执行效率低!
          (7)例
          需求:

    我有一个集合,如下List,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现
    假设:List集合 的元素:"hello","world","java"

    • @author Administrator
    • 按照正常的思路:完成了需求,发现出现异常:
    • java.util.ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
    • 产生的原因:按照正常的需求,给集合添加元素,遍历,遍历同时,判断集合中是否有需要的元素,有就添加新元素,
    • 遍历的时候,使用迭代器遍历,但是添加元素,使用集合添加元素.
    • 集合添加了一个新的元素,迭代器不知道...
    • 使用迭代器遍历元素,不能使用集合添加元素!
    • 解决方案:
    • 方式1:要么使用迭代器遍历,使用迭代器添加元素!
    • 方式2:要么使用集合遍历,使用集合添加元素!
    • 并发
    • 并行
    • */
      public class ListTest {

    public static void main(String[] args) {

    //创建一个集合对象
    List list = new ArrayList() ;
    
    //添加元素
    list.add("hello") ;
    list.add("world") ;
    list.add("java") ;
    
    //方式1:使用迭代器遍历,迭代器添加元素解决并发修改异常
    //Iterator接口没有添加功能呢
    //ListIterator:列表迭代器中有add(object e):方法

    / ListIterator it = list.listIterator() ;
    while(it.hasNext()) {
    String s = (String)it.next() ;
    if("world".equals(s)) {
    //迭代器添加
    it.add("javaee"); //指定元素后面插入元素
    }
    }
    /

    //方式2:使用集合遍历,使用集合添加元素(普通for循环)
    for(int x =0 ;x < list.size() ; x ++) {
        String s = (String)list.get(x) ;
        //判断
        if("world".equals(s)) {
            list.add("javaee") ;
        }
    }
    
    System.out.println("list:"+list);
    
    /*int a = 10 ;
    System.out.println(a/0);*/

    }
    }

Java基础(五)

标签:Java基础   集合   

原文地址:http://blog.51cto.com/13670525/2112415

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!