java学习日记 - 常用类和集合

23 篇文章 0 订阅

一. 常用类

1. BigDecimal

BigDecimal类提供了可以对小数精确运算的方法

1.1 对象的创建

BigDecimal b = new BigDecimal("数字");

1.2 运算

方法操作
add
subtract
multiply
divide
package com.qf;

import java.math.BigDecimal;

public class Demo01 {

	public static void main(String[] args) {
		double d1 = 1.0;
		double d2 = 0.9;
		
		double d3 = d1 - d2;
		System.out.println(d3);  //0.09999999999999998
		
		/*
		 * 在10进制中 10/3 = 3.3333333333333
		 */
		
		BigDecimal b1 = new BigDecimal("1.0");
		BigDecimal b2 = new BigDecimal("0.9");
		BigDecimal b3 = new BigDecimal("0.5");
		
		//减
		BigDecimal r1 = b1.subtract(b2);  //  b1- b2
		System.out.println(r1);
		
		//加
		BigDecimal r2 = b1.add(b2); 
		System.out.println(r2);
		
		//除
		BigDecimal r3 = b1.divide(b3); 
		System.out.println(r3);
		
		//乘
		BigDecimal r4 = b1.multiply(b3); 
		System.out.println(r4);
		
		//由于运算的结果还是BigDecimal对象,所以可以连续运算
		BigDecimal r5 = b1.multiply(b3).add(b2).subtract(b1);
		System.out.println(r5);
		
	}
	
}

2. java.util.Date

Date(java.util.Date)表示时间 (日期)

  • 表示当前时间
    • 操作时间 (大部分被Calendar替代)
  • 作为参数的数据类型
package com.qf;

import java.util.Date;

public class Demo02 {

	public static void main(String[] args) {
		//获取服务器(电脑)当前时间
		Date now = new Date();
		System.out.println(now);  //Thu Apr 14 10:25:21 CST 2022
		
		/*
		 * getTime()  获取当前时间距离1970-01-01 00:00:00的毫秒数
		 */
		long time = now.getTime();  //1649903242950
		System.out.println(time); 
		
		/*
		 * 获取指定的时间
		 * 
		 * Date date = new Date(参数为毫秒数);
		 * 表示距离 1970-01-01 00:00:00 过了 这么多毫秒数的时间
		 */
		Date date = new Date(time - 1000*60*60*24);  //一天前的时间
		System.out.println(date);
		
		/*
		 * 获取一天后的当前时间
		 * 获取5个小时,30分钟前的时间
		 */
		
		
	}
}

class Student {
	private String name;
	private Date birthday;   //作为属性的数据类型
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
}

3. Calendar

Calendar (日历)

接收了所有Date关于日期操作的方法

方法名
getInstance()获取Calendar对象
int get(int field)获取年月日时分秒
set(int field)设置年月日时分秒
add(int field, int value);对时间进行操作
getTime()Calendar转化为Date
package com.qf;

import java.util.Calendar;
import java.util.Date;

public class Demo03 {

	public static void main(String[] args) {
		
		//获取当前时间(日历)
		Calendar c = Calendar.getInstance();
		System.out.println(c);
		
		/*
		 * 
		 * get(int field)   获取某个时间只
		 * 
		 * Calendar.YEAR		年
		 * Calendar.MONTH		月
		 * Calendar.DATE		日
		 * Calendar.HOUR		时
		 * WEEK_OF_YEAR			本年的第几个星期
		 * WEEK_OF_MONTH		本月的第几个星期
		 * 
		 */
		int year = c.get(Calendar.YEAR);
		int month = c.get(Calendar.MONTH);
		int date = c.get(Calendar.DATE);
		int hour = c.get(Calendar.HOUR);
		int week = c.get(Calendar.WEEK_OF_YEAR);
		int weekOfMonth = c.get(Calendar.WEEK_OF_MONTH);
		
		System.out.println(year);
		
		//Calendar和Date的转化
		Date d = c.getTime();
		System.out.println(d);
		
		/*
		 * set(int field,  value);
		 * 
		 */
		
		//获取本月第一天时间
		c.set(Calendar.DATE, 1);
		
		//获取今天12点30分50秒的时间
		c = Calendar.getInstance();   //重新赋值当前时间
		
		c.set(Calendar.HOUR, 12);
		c.set(Calendar.MINUTE, 30);
		c.set(Calendar.SECOND, 50);
		
		System.out.println(c.getTime());
		
		
		//获取1999年12月20日   19:00:00时间
		
		
	}
}
package com.qf;

import java.util.Calendar;

public class Demo03_2 {

	public static void main(String[] args) {
		
		
		/*
		 * add(int field, value);
		 * 在当前时间的基础上,进行时间时间运算  value的可以为负数
		 */
		
		/*
		 * 获取本月的最后一天
		 * 1. 获取下个月的第一天
		 * 2. 往前来一天
		 */
		Calendar c = Calendar.getInstance();
		
		c.add(Calendar.MONTH, 1);   //月份加1
		c.set(Calendar.DATE, 1); 	//日期设置为1     下个月第一天
		
		c.add(Calendar.DATE, -1);   //往前来一天
		
		System.out.println(c.getTime());
		
		
		/*
		 * 获取本星期的最后一天
		 *  1. 获取下个星期的第一天
		 *  2. 往前来一天
		 */
		c = Calendar.getInstance();
		c.add(Calendar.WEEK_OF_YEAR, 1);
		c.set(Calendar.DAY_OF_WEEK, 1);
		c.add(Calendar.DATE, -1);
		
		System.out.println(c.getTime());
		
		
		/*
		 * 获取当前时间
		 * 1. 一个月后的时间
		 * 2. 一年两个月后的时间
		 * 3. 三个星期后的时间
		 * 4. 两周前的时间
		 * 5. 五周后第一天的时间
		 * 6. 三月前的那个月的最后一天
		 * 7. 本月第一天,最后一天
		 * 8. 本周第一天,最后一天
		 */
		
		
		//获取当前时间距离1970-01-01 00:00:00的毫秒数
		long timeInMillis = c.getTimeInMillis();
		System.out.println(timeInMillis);
		
	}
}

4. SimpleDateFormat

SimpleDateFormat 是操作日期的工具类

  • 把Date对象转化为对应形式的字符串 : df2.format(now);
  • 把日期类型的字符串转化为Date对象 : df2.parse(str2);
package com.qf;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo04 {

	public static void main(String[] args) throws ParseException {
		//日期格式化
		Date now = new Date();
		
		//Thu Apr 14 14:21:11 CST 2022
		System.out.println(now);
		
		
		//2022-04-14 14:21:11
		
	//	String format = "yyyy-MM-dd HH:mm:ss";  //2022-04-14 14:23:40
	//	String format = "yyyy/MM/dd";   		//2022/04/14
		String format = "yyyy-MM-dd";
		
		//创建格式化工具
		DateFormat df = new SimpleDateFormat(format);
		
		//对日期进行格式化
		String dateStr = df.format(now);
		System.out.println(dateStr);
		
		
		
		/*
		 * 把字符串对象,转化为Date对象
		 * 
		 * 被转化的日期类型的字符串  形式  必须和定义格式化工具是,数据形式一致
		 */
		String str = "2022-09-08";
		Date date = df.parse(str);
		System.out.println(date);
		
		
		/*
		 * 把当前日期转化为  2022年3月17日   12时10分5秒
		 * 2022年6月6日   6时6分6秒  转化为Date对象
		 */
		String format2 = "yyyy年MM月dd日   HH时mm分ss秒";
		DateFormat df2 = new SimpleDateFormat(format2);
		String dateStr2 = df2.format(now);
		System.out.println(dateStr2);
		
		String str2 = "2022年6月6日   6时6分6秒";
		Date date2 = df2.parse(str2);
		System.out.println(date2);
		
	}
}

日期格式参数:

LetterDate or Time ComponentPresentationExamples
GEra designatorTextAD
yYearYear1996; 96
YWeek yearYear2009; 09
MMonth in year (context sensitive)MonthJuly; Jul; 07
LMonth in year (standalone form)MonthJuly; Jul; 07
wWeek in yearNumber27
WWeek in monthNumber2
DDay in yearNumber189
dDay in monthNumber10
FDay of week in monthNumber2
EDay name in weekTextTuesday; Tue
uDay number of week (1 = Monday, …, 7 = Sunday)Number1
aAm/pm markerTextPM
HHour in day (0-23)Number0
kHour in day (1-24)Number24
KHour in am/pm (0-11)Number0
hHour in am/pm (1-12)Number12
mMinute in hourNumber30
sSecond in minuteNumber55
SMillisecondNumber978
zTime zoneGeneral time zonePacific Standard Time; PST; GMT-08:00
ZTime zoneRFC 822 time zone-0800
XTime zoneISO 8601 time zone-08; -0800; -08:00

5. System

java系统对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T1LgwLP4-1650638240039)(image-20220414151521118.png)]

package com.qf;

import java.util.Arrays;
import java.util.Date;

public class Demo05 {

	public static void main(String[] args) {
		
		/*
		 * 拷贝数组
		 */
		int[] arr = {1,2,3,4};
		
		// {0,1,2,3,0,0,0,0}
		int[] newArr = new int[arr.length*2];
		
		System.arraycopy(arr, 0, newArr, 1, 3);
		System.out.println(Arrays.toString(newArr));
		
		/*
		 * 获取当前系统的毫秒数
		 * 	和Date对象getTime()方法作用一样
		 */
		long l1 = System.currentTimeMillis();
		
		long l2 = new Date().getTime();  //l1 == l2
		
		System.out.println(l1);
		System.out.println(l2);
		
		//立即回收垃圾对象
		System.gc();
		
		//退出jvm     程序立马结束
		System.exit(1);   
		
		System.out.println("程序结束----");
		
	}
}

二. 集合

1. 前言

因为数组无法自动扩容,java提供一个可以保存多个数据,且可以自动扩容的工具,这种工具就叫做集合

– java把集合定义成集合

​ 集合能够干什么,提供的功能

– 集合有各种各样的实现

​ 实现集合定义的功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OZDpLmd1-1650638240041)(image-20220414154300377.png)]

2.Collection

Collection是所有集合的父口,定义了集合这种工具应该有的功能。

public interface Collection<T> extends Iterable<E> {
	
    //集合中有多少个元素
     int size();
    //是否为空,是否没有元素
    boolean isEmpty();
    //是否包含某个值
    boolean contains(Object o);
    //转化为数组
    Object[] toArray();
    
    //转化为指定数据类型的数组
    <T> T[] toArray(T[] a);
    
    //添加元素
    boolean add(T e);
    //删除元素
    boolean remove(Object o);
    //是否包含另外一个集合
    boolean containsAll(Collection<?> c);
    //清空
    void clear();
}
package com.qf;

import java.util.ArrayList;
import java.util.Collection;

public class Demo02 {

	public static void main(String[] args) {
		
		Collection c = new ArrayList();
		
		//添加元素
		c.add(1);
		c.add(1.1);
		c.add("heheda");
		c.add(true);
		c.add('y');
		
		int size = c.size();
		System.out.println(size);
		
		boolean empty = c.isEmpty();
		System.out.println(empty);
		
		//删除
		c.remove(1);
		
		size = c.size();
		System.out.println(size);
		
		/*
		 * 遍历集合
		 * 
		 * 增强行for循环:一定遍历的是集合或者数组
		 * for(接收变量的数据  变量 : 集合/数组) {
		 * 		//使用变量操作每次接收的元素      逻辑代码
		 * }
		 * 
		 * 1. 把c集合中第1个元素赋值给obj,执行for循环 逻辑代码
		 * 2. 把c集合中第2个元素赋值给obj,执行for循环 逻辑代码
		 * 3. 把c集合中第3个元素赋值给obj,执行for循环 逻辑代码
		 * 4. 把c集合中第....个元素赋值给obj,执行for循环 逻辑代码    
		 * 5. 一直到最后一个元素赋值给obj,for循环结束
		 */
		for(Object obj : c) {
			System.out.println(obj);
		}
		
	}
}

3. 泛型

泛型表示一种参数化的数据类型

  • 数据类型必须是引用类型,不能为基本类型
  • 可以定义集合保存的数据类型
    • 使用泛型接收遍历的结果
package com.qf;

public class Demo03 {

	public static void main(String[] args) {
		
	/*	
		Test test = new Test();
		
		Stu s = new Stu();
//		test.stu = s;
		
		Person p = new Person();
		test.person = p;
		
	*/	
		Test<Stu> test01 = new Test<Stu>();
		Stu s = new Stu();
		test01.t = s;
		test01.show();
		
		
		Test<Person> test02 = new Test<Person>();
		Person p = new Person();
		test02.t = p;
		test02.show();
		
		
		Test02 t01 = new Test02();
		Stu show = t01.show(s);
		
		Person pp = t01.show(p);
		
	}
}


/*
 * T:
 * 1. 相当于是一个参数
 * 2. 参数表示的一种数据类型
 */
class Test<T> {
	/*
		Stu stu;
		
		public void show() {
			System.out.println(stu);
		}
		
		
		Person person;
		
		public void show() {
			System.out.println(person);
		}
	*/
	
	T t;
	
	public void show() {
		System.out.println(t);
	}
	
}

class Stu {
	
}

class Person {
	
}

class Test02 {
	
	public <T> T show(T t) {
		return t;
	}
}
package com.qf;

import java.util.ArrayList;
import java.util.Collection;

public class Demo03_2 {

	public static void main(String[] args) {
		//定义只保存字符串的集合
		Collection<String> c = new ArrayList<String>();
		c.add("aaa");
		c.add("bbb");
		
		//定义泛型后,可以使用该泛型的变量接收集合中的元素
		for(String s : c) {
			System.out.println(s);
		}
		
		/*
		 * 定义只能保存整数的集合
		 * 	不能定义基本类型,只能定义基本类型的包装类
		 * 		-- 可以自动拆装箱
		 */
		Collection<Integer> c2 = new ArrayList<Integer>();
		c2.add(1);
		c2.add(2);
		c2.add(3);
		
		for(int i : c2) {
			System.out.println(i);
		}
		
		//创建一个保存Stu对象的集合
		Collection<Stu> c3 = new ArrayList<Stu>();
		c3.add(new Stu());
		c3.add(new Stu());
		
		for(Stu s : c3) {
			System.out.println(s);
		}
		
		
	}
}

4. List,Set

List,Set都是Collection子接口

  • List : 有序可重复
    • 有序,每个元素都要一个下标
    • ArraysList,LinkedList,Vector
  • Set : 无序不可重复
    • 有序,每个元素没有下标(也是有顺序的)
    • 不可重复
    • HashSet,Hashtable, LinkedHashSet
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值