java j集合_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);*/

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值