10.12-10.15Java - 常用工具类、集合

常用工具类

java.util.Date;日期

java.time.LocalDate;

java.time.LocalDateTime;Java8后的日期

java.lang.Math 数学运算

java.util.Arrays 数组工具类

package d12;

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.util.Date;

public class D12 {
	public static void main(String[] args) {
		
		//java.time.LocalDateTime  Java8后新增的日期类
		//获取当前日期时间
		LocalDateTime localDateTime = LocalDateTime.now();
		System.out.println(localDateTime);
		
		System.out.println(localDateTime.getYear());//获取年份
		System.out.println(localDateTime.getMonthValue());//获取月份
		System.out.println(localDateTime.getMonth());//获取月的名字
		System.out.println(localDateTime.getDayOfMonth());//或租所在月的第几天
		System.out.println(localDateTime.getDayOfWeek());//获取所在周的第几天
		System.out.println(localDateTime.getHour());//获取小时
		System.out.println(localDateTime.getMinute());//获取分钟
		System.out.println(localDateTime.getSecond());//获取秒
		
		
		//自定义一个日期
		LocalDate date2 = LocalDate.of(2014, Month.JULY, 20);
		System.out.println(date2);

//		//java.util.Date 日期
//		
//		
//		Date date = new Date();//创建一个日期对象
//		System.out.println(date);
//		
//		//java.text.Sim
//		//new SimpleDateFormat(日期格式模板)  创建一个日期格式化工具类
//		SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
//		String dateString = sf.format(date);
//		System.out.println(dateString);
		
		
		
		
		
	
//				//java.lang.Math  数学运算 
//				byte a = 2;
//				short b = 4;
//				//加法
//				int h = Math.addExact(a,b);
//				System.out.println(h);
//				
//				//减法
//				int j = Math.subtractExact(a, b);
//				
//				//乘法
//				int c = Math.multiplyExact(a, b);
//				
//				//除法
//				int chu = Math.floorDiv(a, b);
//				
//				System.out.println("----------------------");
//				
//				//求最大值
//				int max = Math.max(12, 3);
//				System.out.println(max);
//				//最小
//				int min = Math.min(2, 3);
//				System.out.println(min);
//				
//				//绝对值
//		
//				double ab = Math.abs(-3.14);
//				//圆周率
//				System.out.println(Math.PI);
//				//pow(a,b)a的b次方
//				double r1 = Math.pow(2, 10);
//				System.out.println(r1);
				
		
	}
}


包装类

8个基本数据类型分别对应的包装类

byte Byte

short Short

int Integer

long Long

float Float

double Double

char Character

boolean Boolean

package d12;

import java.util.Arrays;

public class D12 {
	public static void main(String[] args) {
		//java.util.Arrays  数组工具类
		int[] a = {2,1,3,4,5};
		//1.打印数组
		System.out.println(Arrays.toString(a));
		
		//2.数组赋值
		Arrays.fill(a, 0);//给数组所有元素赋值为0
		
		//fill(数组,开始下标,结束下标,替换值)
		//从开始下标(包括开始下标)到结束下标(不包括结束下标)范围内的所有元素都替换为11
//		Arrays.fill(a, 1, 3, 11);
		
		//3.数组排序
//		Arrays.sort(a);
		
		//4.二分查找 前提:数组排好序
//		int index = Arrays.binarySearch(a, 3);
//		System.out.println(index);
		
		//5.数组扩容   copyOf(原数组,新数组长度)
		int[] b = Arrays.copyOf(a, 12);
		System.out.println(Arrays.toString(b));
		
		//6.比较数组中的元素以及顺序是否相同
		int[] c = {2,1,3,4,5};
		boolean tar = Arrays.equals(a, c);
		System.out.println(tar);
	}
}

package d12;

import java.util.Arrays;

public class D12 {
				
	public static void main(String[] args) {
		int a = 12;
		Integer b = a;
		Integer b2 = 20;
		
		String str = "110";
		//valueOf()将其他类型,转换为整数类型
		Integer b3 = Integer.valueOf(str);
		
		//取值范围
		int max = Integer.MAX_VALUE;
		int min = Integer.MIN_VALUE;
		System.out.println();
		/*
		 * valueOf的原理
		 * Integer会缓存[-128,127]这个范围内的数,当传入的参数在这个范围内时,会直接返回缓存中的数字
		 * 否则超出这个范围才创建新的Integer对象
		 * */
		//1.比较两个数的大小
		int res = Integer.compare(2, 4);//compare(a,b)返回1表示a>b返回-1表示a<b返回0表示a=b
		//2.数字转字符串
		String s = Integer.toString(res);
	}
}

集合

Collection接口又有3种子类型,List、Set和Queue,在下面是一些抽象类,最下面具体实现类

Collection的实现类只能存储引用类型,所以对于基本数据类型,Collection的实现类只能存储他们的包装类(位于java.lang包)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lD0qzYFq-1666005032931)(C:\Users\19912\Documents\Tencent Files\1991234066\FileRecv\6-1 集合-Collection.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XRsiXjnG-1666005032933)(C:\Users\19912\Documents\Tencent Files\1991234066\FileRecv\6-2 集合-Map.png)]

List

有序,可重复

ArrayList是实现了基于动态数组的数据结构,在未声明长度的情况下,默认长度是10,数据填满会自动扩充原长度的一半

public static void main(String[] args) {
		//创建一个List集合
		List<String> list = new ArrayList<>();
		
		//添加元素
		list.add("AAA");
		//指定下标添加元素
		list.add(1,"CCC");
		
		//获取元素的值
//		System.out.println(list.get(1));
		
		//集合的长度
//		System.out.println(list.size());
		
		//遍历集合
		
		for (String s : list) {
			System.out.println(s);
		}
		//List是有序的,允许重复的
		list.add("BBB");
		list.add("BBB");
	}

Set

特点:
1.集合中的元素无序,不可重复

public static void main(String[] args) {
		//创建一个set集合
		Set<Integer> set = new HashSet<Integer>(); 
		
		//添加元素
		set.add(1);
		set.add(2);
		
		//获取集合的长度size
		
		//遍历元素
		
		//判断是否存在指定元素
		boolean tar = set.contains(1);
		
		//移除元素
		set.remove(2);
		
		//清空集合
		set.clear();
	}

Queue

队列:先进先出

栈:后进先出

package d12;


import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;


/*
 
 队列Queue
 */

public class D13 {
				
	public static void main(String[] args) {
		//创建一个set集合
		Queue<Integer> queue = new LinkedList<Integer>();
		
		//添加元素
		queue.add(12);
		queue.add(4);
		
		//获取队列长度size()
		
		//1.获取队列头部元素,但不删除,队列为空,引发异常
//		int firstEle = queue.element();
		
		//2获取队列头部元素,不删除,队列为空返回null
//		Integer fristEle2 = queue.peek();
		
		//3.获取并删除头部元素,队列为空,返回null
		
//		Integer fristEle3 = queue.poll();
//		System.out.println(fristEle3);
//		
//		System.out.println(queue.poll());
		
		//4.在不超过容量长度的情况下,可以立即插入一个元素到队列尾
		//当插入元素超出容量长度时(插入失败),add()方法会报异常,而offer()方法会返回布尔值false
		
		queue.offer(7);
		
		//5.遍历队列
		Integer ele = null;
		while ((ele = queue.poll()) != null) {
			System.out.println(ele);
		}
	}
}

vector

允许重复

1.基于动态数组的数据结构
2.是线程同步(线程安全),执行效率慢
3.数据填满时会自动扩容原长度的一倍,因此ArrayList更节省空间

package d12;

import java.util.List;
import java.util.Vector;

/*
 Vector
 1.基于动态数组的数据结构
 2.是线程同步(线程安全),执行效率慢
 3.数据填满时会自动扩容原长度的一倍,因此ArrayList更节省空间

 */

public class D13 {
				
	public static void main(String[] args) {
		List<Integer> vector = new Vector<Integer>();
		
		//添加
		vector.add(1);
		vector.add(1);
		vector.add(2);
		vector.add(3);
		
		//集合长度
		System.out.println(vector.size());
		
		//获取指定下标的元素
		Integer ele = vector.get(3);
		System.out.println(ele);
		
		for (Integer integer : vector) {
			System.out.println(integer);
		}
	}
}

Map

特点:

  1. 存储的是键值对
  2. k和v只能存储引用类型
  3. map的key不允许重复,多次给一个key赋值,后面的会把前面的赋值覆盖Map
Map实现类KeyValue
HashMap允许为null允许为null
TreeMap不允许为null允许为null
ConcurrentMap不允许为null不允许为null
HashTable不允许为null不允许为null
package d12;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/*
 Map
 */

public class D13 {
				
	public static void main(String[] args) {
		//创建一个Map集合,map中存储的元素,k-v键值对
		Map<String, Integer> map = new HashMap<String, Integer>(); 
		
		//添加元素
		map.put("name", 12);//k-v键值对  key键,value值
		
		//获取值,根据键名
		Integer v = map.get("name");
		System.out.println(v);
		
		map.put("name", 24);//map中的键名是唯一的,多次对同一个键赋值,后面的值会覆盖前面的值
		System.out.println(map.get("name"));
		
		//集合长度
		int len = map.size();
		
		//获取集合中所有键的Set集合
		Set<String> kSet = map.keySet();
		for (String k : kSet) {
			System.out.println(map.get(k));
		}
		
		//清空
//		map.clear();
		
		//是否包含指定键
		boolean hasK = map.containsKey("name");
		
		//是否包含指定值
		boolean hasV = map.containsValue(24);
		System.out.println(hasV);
		
		//获取所有键值对的Set集合
		Set<Entry<String, Integer>> eSet = map.entrySet();
		for (Entry<String, Integer> entry : eSet) {
			System.out.println(entry.getKey()+entry.getValue());
		}
		
		//判断是否为空集合
		boolean t = map.isEmpty(); 
		
		//根据键删除键值对
//		System.out.println(map);
//		map.remove("name");
//		System.out.println(map);
		
		//替换
		map.replace("name", 100);
		System.out.println(map);
	}
}

HashMap的实现原理

  1. HashMap底层原理是数组加链表的结构,在java8后又增加了红黑树
  2. 当添加一个元素key-value时,首先计算键值对的Key的hash值,以此来确定插入到数组的位置
  3. 如果根据Hash值确定的数组位置已经存在元素,就添加到同一个Hash值的元素的后面,于是形成了链表
  4. 当链表长度大于8,并且数组中元素k-v键值对个数超过64时,链表就转成红黑树,这样就提高了查找的速率
  5. 当红黑树中的节点数个数小于6时,红黑树又重新转换为链表

小练习

package d13;

import java.util.ArrayList;
import java.util.List;

public class Student {
	private String name;
	private double grade;
	private char level;
	
	
	public Student(String name, double grade) {
		this.name = name;
		this.grade = grade;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getGrade() {
		return grade;
	}
	public void setGrade(double grade) {
		this.grade = grade;
	}
	public char getLevel() {
		return level;
	}
	public void setLevel(char level) {
		this.level = level;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", grade=" + grade + ", level=" + level + "]";
	}
	void stuLevel(){
		if (grade >=85) {
			level = 'A';
		}else if (grade>=60&&grade<85) {
			level = 'B';
		}else {
			level = 'c';
		}
	}
	
	public static void main(String[] args) {
		List<Student> list = new ArrayList<Student>();
		list.add(new Student("张三",85));
		for (Student student : list) {
			student.stuLevel();
		}
		System.out.println(list);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值