1.常用时间类
-
Calendar类
public static void main(String[] args) { // JDK1.1开始 // Calendar类是一个抽象类, // 它提供了在特定时刻和一组日历字段(如YEAR、MONTH、DAY_of_MONTH、HOUR等)之间进行转换的方法,以及操作日历字段(例如获取下一周的日期)的方法。时间的瞬间可以用毫秒值表示,毫秒值是从1970年1月1日00:00:00.000 GMT(格里高利)开始的偏移量。 Calendar c1 = new GregorianCalendar(); System.out.println("c1 = " + c1); Calendar c2 = Calendar.getInstance(); System.out.println("c2 = " + c2); // 获取 int get(int field) int year = c1.get(Calendar.YEAR); System.out.println("year = " + year); int month = c1.get(Calendar.MONTH); System.out.println("month = " + month); // 查表法 String[] months = {"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"}; System.out.println(months[c1.get(Calendar.MONTH)]); int day = c1.get(Calendar.DATE); System.out.println("day = " + day); int week = c1.get(Calendar.DAY_OF_WEEK); System.out.println("week = " + week); String[] weeks = {"", "日", "一", "二", "三", "四", "五", "六"}; System.out.println(weeks[c1.get(Calendar.DAY_OF_WEEK)]); // 设置 : // void set(int field, int value) c1.set(Calendar.YEAR, 2024); year = c1.get(Calendar.YEAR); System.out.println("year = " + year); c1.set(Calendar.MONTH, 7);// 偏移量 System.out.println(months[c1.get(Calendar.MONTH)]); // void set(int year, int month, int date) c1.set(2008, Calendar.AUGUST, 8); System.out.println(months[c1.get(Calendar.MONTH)]); // void set(int year, int month, int date, int hourOfDay, int minute) // void set(int year, int month, int date, int hourOfDay, int minute, int second) c2.set(2008, Calendar.AUGUST, 8); System.out.println(c1.equals(c2)); // void clear() 清除所有字段 c1.clear(); c2.clear(); System.out.println("c1 = " + c1); c1.set(2008, Calendar.AUGUST, 8); c2.set(2008, Calendar.AUGUST, 8); System.out.println(c1.equals(c2)); // void clear(int field) 清除指定字段 System.out.println("c1 = " + c1); c1.clear(Calendar.YEAR); System.out.println("c1 = " + c1); // void add(int field, int amount) : 在现有时间的基础上向前向后延伸时间 c2.add(Calendar.YEAR, -1000); System.out.println(c2.get(Calendar.YEAR)); // boolean after(Object when) // boolean before(Object when) // 计算二月份有几天 2024年 Calendar calendar = new GregorianCalendar(); calendar.set(2023, Calendar.MARCH, 1); calendar.add(Calendar.DATE, -1); System.out.println(calendar.get(Calendar.DATE)); // Date ---> Calendar c1.setTime(new Date()); // Calendar ---> Date Date time = c1.getTime(); }
-
java.time
public static void main(String[] args) { /* 1. JDK1.0 java.util.Date 缺陷 : 偏移量 2. JDK1.1 java.util.Calendar 线程不安全 缺陷 : a.偏移量 b.可变性,线程不安全的 c.格式化 : java.text.DateFormat 只适用于 Date , 不能用于 Calendar 3. JDK8.0 java.time : 时间包 */ // LocalDate : 只有年月日 // LocalTime : 只有时分秒毫秒 // LocalDateTime : 年月日时分秒毫秒 // now() LocalDate localDate = LocalDate.now(); System.out.println("localDate = " + localDate); LocalTime localTime = LocalTime.now(); System.out.println("localTime = " + localTime); LocalDateTime localDateTime = LocalDateTime.now(); System.out.println("localDateTime = " + localDateTime); // of() 设置 LocalDateTime localDateTime1 = LocalDateTime.of(2008, 8, 8, 8, 8); System.out.println("localDateTime1 = " + localDateTime1); System.out.println("localDateTime = " + localDateTime); LocalDate localDate1 = LocalDate.of(2008, 8, 8); System.out.println("localDate1 = " + localDate1); // 获取 get int year = localDateTime1.getYear(); System.out.println("year = " + year); System.out.println(localDateTime1.getMonth()); System.out.println("localDateTime1.getDayOfMonth() = " + localDateTime1.getDayOfMonth()); System.out.println(localDateTime1.getMinute()); // 设置 with System.out.println(LocalDateTime.now().withYear(2030).getYear()); System.out.println(LocalDateTime.now().withMonth(9).getMonth()); }
-
时间的格式化
public static void main(String[] args) { // 格式化 : DateTimeFormatter // DateTimeFormatter // 1.预定义标准 : // ISO_DATE_TIME : 2023-12-19T10:18:46.27 // ISO_DATE : 2023-12-19 // ISO_TIME : 10:19:49.405 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ISO_TIME; // LocalDateTime ---> String String format = dateTimeFormatter.format(LocalDateTime.now()); System.out.println("format = " + format); // String ---> LocalDateTime TemporalAccessor parse = dateTimeFormatter.parse("10:19:49.405"); System.out.println("parse = " + parse); LocalTime parse1 = LocalTime.parse("10:19:49.405", dateTimeFormatter); System.out.println("parse1 = " + parse1); LocalDateTime localDateTime = LocalDateTime.parse("2023-12-19T10:18:46.27"); System.out.println("localDateTime = " + localDateTime); localDateTime = LocalDateTime.parse("2023-12-19T10:18:46.27", DateTimeFormatter.ISO_DATE_TIME); System.out.println("localDateTime = " + localDateTime); // 2.本地相关 : FormatStyle // LONG :2023年12月19日 上午10时22分59秒 // MEDIUM : 2023-12-19 10:23:17 // SHORT : 23-12-19 上午10:23 DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT); String format1 = dateTimeFormatter1.format(LocalDateTime.now()); System.out.println("format1 = " + format1); TemporalAccessor parse3 = dateTimeFormatter1.parse("23-12-19 上午10:23"); System.out.println("parse3 = " + parse3); LocalDateTime parse2 = LocalDateTime.parse("23-12-19 上午10:28", DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)); System.out.println("parse2 = " + parse2); // 3.自定义 : 常用 DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy/MM/dd kk:mm:ss SSS"); String format2 = dateTimeFormatter2.format(LocalDateTime.now()); System.out.println("format2 = " + format2); Instant now = Instant.now(); System.out.println("now = " + now); Clock clock = Clock.systemDefaultZone(); System.out.println("clock = " + clock); ZoneId zone = clock.getZone(); System.out.println("zone = " + zone); }
2.集合
-
集合Collection
public static void main(String[] args) { /* 算法 :解题的流程 1.可以解决具体的问题 1 + 2 +3 +4 + ... + 100 2.设计解决问题的流程 a. 1+2 = 3 3 +3 =6 6+4=10 b. 1+100 2+99 3+98 4+97 ... 3.评价指标 时间复杂度 空间复杂度 数据结构 : 1.逻辑结构 : 认知结构、思想上的结构 厨房 , 客厅 ... 线性表 , 图 , 栈 ,队列 2.物理结构 : 真实结构 钢筋水泥 + 力学 紧密结构(顺序结构) 跳转结构 (链式结构) 线性表 :相同类型数据的有序序列 a1 a2 a3 ... an an+1 1.相同的数据类型 2.序列、顺序性 3.有限 紧密结构 : 优点 : 查询块 缺点 : 增删慢 链式结构、跳转结构 : 1.单项链表 2. 双向链表 3.环式链表 优点 :增删快 缺点 :查询效率低 */ /* 数组 : 1.增删元素麻烦 : 需要字节编写函数 2.长度是固定的 : 3.结构单一 集合 :内存存储 1.有增删改查的功能 2.长度会自增 3.数据结构较多 , 可以满足多种需求 数据库 : 持久存储 */ // Collection 表示一组对象,这些对象也称为 collection 的元素。 // | List : // | ArrayList : // | Vector : // | LinkedList : // | Set : // | HashSet : // | TreeSet : // 注意 : 集合中的 contains 函数 , remove 函数 以及 indexOf , lastIndexOf 函数会根据集合中的元素的equals函数进行判断 Collection<Object> collection = new ArrayList<>(); // 增 // boolean add(E e) // 确保此 collection 包含指定的元素(可选操作)。 collection.add(123);// Integer collection.add("aaa"); collection.add(3.14);// Double collection.add(true);// Boolean collection.add('Y');// Character Object o = new Object(); collection.add(o); System.out.println(collection);//等同于.toString() // 删 // boolean remove(Object o) // 从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 collection.remove(true); collection.remove("aaa"); collection.remove(o); System.out.println("collection = " + collection); // void clear() // 移除此 collection 中的所有元素(可选操作)。 collection.clear(); System.out.println("collection = " + collection); // 查 // int size() // 返回此 collection 中的元素数。 collection.clear(); System.out.println("collection.size() = " + collection.size()); // 判断 // boolean contains(Object o) // 如果此 collection 包含指定的元素,则返回 true。 System.out.println("collection.contains(123) = " + collection.contains(123)); // boolean isEmpty() // 如果此 collection 不包含元素,则返回 true。 System.out.println("collection.isEmpty() = " + collection.isEmpty()); // 集合 ---> 数组 // Object[] toArray() // 返回包含此 collection 中所有元素的数组。 // <T> T[] toArray(T[] a) // 返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。 }
-
迭代器Iterator
public static void main(String[] args) { Collection collection = new ArrayList(); collection.add(123);// Integer collection.add("aaa"); collection.add(3.14);// Double collection.add(true);// Boolean collection.add('Y');// Character // Iterator<E> iterator() // 返回在此 collection 的元素上进行迭代的迭代器。 // 开发不会使用 while 循环 Iterator iterator = collection.iterator(); while (iterator.hasNext()) {// iterator.hasNext() 判断当前指针是否有数据. 判断后不会主动向后找, 需要配合.next()移动指针 Object o = iterator.next();// 每调用一次 next() 函数就会得到一个新的元素,如果没有元素,就会 NoSuchElementException System.out.println("o = " + o); } System.out.println("----------------------------------------"); // 开发常用方式一 : for 循环 for (Iterator iterator1 = collection.iterator(); iterator1.hasNext(); ) { Object o = iterator1.next(); System.out.println("o = " + o); } // 方式二 : 增强for循环 for (Object object : collection) { System.out.println("object = " + object); } // 方式三 : JDK8.0开始 : Stream collection.forEach(System.out::println); // 方式四 : JDK8.0 collection.stream().forEach(System.out::println); // 方式四 : JDK8.0 collection.stream().forEach(new Consumer() { @Override public void accept(Object o) { System.out.println("o = " + o); } }); }
-
泛型
public static void main(String[] args) { // JDK5.0 泛型 : <数据类型> // 将集合的类型限定为某个类型, 编译时期有效 // 优势: // 1.将运行时异常转换为编译时错误 // 2.可以避免类型转换 Collection<String> collection1 = new ArrayList<>(); Collection<String> collection2 = new ArrayList<>(); collection1.add("aaa"); collection1.add("bbb"); collection1.add("ccc"); collection1.add("ddd"); for (Iterator<String> iterator = collection1.iterator(); iterator.hasNext(); ) { // Object o = iterator.next(); // String s = (String) o; String s = iterator.next();// 泛型后可以直接使用对应类, 来接收集合的数据, 无需强制类型转换 System.out.println("s.length() = " + s.length()); } collection2.add("ccc"); collection2.add("ddd"); collection2.add("eee"); collection2.add("fff"); // boolean addAll(Collection<? extends E> c) 并集 // 将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 // collection1.addAll(collection2); // boolean containsAll(Collection<?> c) // 如果此 collection 包含指定 collection 中的所有元素,则返回 true。 System.out.println(collection1.containsAll(collection2)); // boolean removeAll(Collection<?> c) 差集 // 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 // collection1.removeAll(collection2); System.out.println("collection1 = " + collection1); System.out.println("collection2 = " + collection2); // boolean retainAll(Collection<?> c) 交集 // 仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。 collection1.retainAll(collection2); System.out.println("collection1 = " + collection1); System.out.println("collection2 = " + collection2); }