品牌建设网站特点会员发布网站建设
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:15
当前位置: 首页 > news >正文
品牌建设网站特点,会员发布网站建设,网站运营方案案例,什么样的网站利于百度优化Java基础学习 一、JDK8时间类1.1 Zoneld时区1.2 Instant时间戳1.3 ZonedDateTime1.4 DateTimeFormatter1.5 日历类时间表示1.6 工具类1.7 包装类JDK5提出的新特性Integer成员方法 二、集合进阶2.1 集合的体系结构2.1.1 Collection 2.2collection的遍历方式2.2.1 迭代器遍历2.2.… Java基础学习 一、JDK8时间类1.1 Zoneld时区1.2 Instant时间戳1.3 ZonedDateTime1.4 DateTimeFormatter1.5 日历类时间表示1.6 工具类1.7 包装类JDK5提出的新特性Integer成员方法 二、集合进阶2.1 集合的体系结构2.1.1 Collection 2.2collection的遍历方式2.2.1 迭代器遍历2.2.2 增强for遍历2.2.3 lambda遍历2.2.4 列表迭代器 ListIterator2.2.5 五种遍历方式对比 2.3 List集合2.4 数据结构2.4.1 栈2.4.2 队列2.4.3 数组2.4.4 链表 2.5 ArrayList2.6 LinkedList集合iterator底层原理解析 2.7 泛型深入2.7.1 泛型类2.7.2 泛型方法2.7.3 泛型接口2.7.4 泛型的继承和通配符 一、JDK8时间类 JDK7:多线程环境下会导致数据安全的问题 JDK8:时间日期对象都是不可变的解决了这个问题 在这里插入图片描述 1.1 Zoneld时区 import java.time.ZoneId;
import java.util.Set;public class ZoneId获取1 {public static void main(String[] args) {//1.获取所有的时间名称SetString zoneIds ZoneId.getAvailableZoneIds();System.out.println(zoneIds.size());//600System.out.println(zoneIds);//600个名称时间 我国的Asia/Shanghai//2. 获取当前系统默认的时区ZoneId zoneId ZoneId.systemDefault();System.out.println(zoneId);//Asia/Shanghai//3. 获取指定区域的时区ZoneId id ZoneId.of(Asia/Shanghai);System.out.println(id);//Asia/Shanghai}
}
1.2 Instant时间戳 import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;public class Instant方法 {public static void main(String[] args) {
///1. 获取当前Instant对象标准时间Instant now Instant.now();System.out.println(now);//2023-04-18T00:18:32.623003300Z///2. 根据秒/毫秒/纳秒获取Istant对象Instant instant1 Instant.ofEpochMilli(0L);System.out.println(instant1);//1970-01-01T00:00:00ZInstant instant Instant.ofEpochSecond(1L);System.out.println(instant);//1970-01-01T00:00:01ZInstant instant2 Instant.ofEpochSecond(1L, 1000000000L);System.out.println(instant2);//1970-01-01T00:00:02Z//3. 指定时间ZonedDateTime zonedDateTime Instant.now().atZone(ZoneId.of(Asia/Shanghai));System.out.println(zonedDateTime);//2023-04-18T08:26:19.21639490008:00[Asia/Shanghai]//4 .isXXX进行判断时间Instant instant3 Instant.ofEpochSecond(0L);Instant instant4 Instant.ofEpochSecond(10L);//isBefore判断调用者代表的时间是否在参数表示时间的前面//isAfter判断调用者代表的时间是否在参数表示时间的后面boolean result1 instant3.isAfter(instant4);boolean result2 instant3.isBefore(instant4);System.out.println(result1 result2); //false true//5. 减少时间系列Instant instant5 Instant.ofEpochSecond(10000L);Instant instant6 instant5.minusMillis(1000L);System.out.println(instant5instant6);//1970-01-01T02:46:40Z1970-01-01T02:46:39Z}
}
1.3 ZonedDateTime import java.time.ZoneId;
import java.time.ZonedDateTime;public class zonedDateTime {public static void main(String[] args) {//1 .获取ZonedDateTime时间对象ZonedDateTime time ZonedDateTime.now();System.out.println(time);//2023-04-18T08:49:50.15431908:00[Asia/Shanghai]//2. 获取指定的时间对象带时区ZonedDateTime time1 ZonedDateTime.of(2023, 5, 18, 8, 59, 12, 0, ZoneId.of(Asia/Shanghai));System.out.println(time1);//2023-05-18T08:59:1208:00[Asia/Shanghai]// 3. withXXX 修改时间系列年/月/日/时/分/秒都可以ZonedDateTime zonedDateTime time1.withYear(2028);System.out.println(zonedDateTime);//2028-05-18T08:59:1208:00[Asia/Shanghai]}
}
1.4 DateTimeFormatter
日期格式化
1.5 日历类时间表示 1.6 工具类 Period
import java.time.LocalDate;
import java.time.Period;public class JDK时间工具类 {public static void main(String[] args) {//获取当前时间对象LocalDate now LocalDate.now();//获取生日时间对象LocalDate birthday LocalDate.of(2004,01,05);//获取到生日与现在的时间差Period period Period.between(birthday, now);System.out.println(period);//P19Y3M13DSystem.out.println(period.getYears());//19System.out.println(period.getDays());//13System.out.println(period.getMonths());//3System.out.println(period.toTotalMonths());//获取到生日到现在的一共月份 —231—}
}
ChronoUnit
//获取当前时间对象LocalDate now LocalDate.now();1.7 包装类
基本数据类型对应的引用类型 —– 基本类型—对象 用一个对象把数据包起来 注意 new Integer 是在堆区创建一个新的对象Integer.ofvalue 是在-128~127之间是公用一个内存当中 Integer i6 Integer .valueof(127);
Integer i7 Integer.valueof(127);
System.out.println(i6 i7);//true
Integer i8 Integer .valueof(128);
Integer i9 Integer.valueof(128);
System.out.println(i8 i9);//falseJDK5提出的新特性
在JDK5的时候提出了一个机制:自动装箱和自动拆箱自动装箱: 把基本数据类型会自动的变成其对应的包装类自动拆箱:把包装类自动的变成其对象的基本数据类型
//自动装箱
Integer i1 10;//创建对象与上方一致
Integer i2 new Integer(10);//自动拆箱
int i i2;
在JDK5以后int和Integer可以看做是同一个东西因为在内部可以自动转化。
Integer成员方法 public class Interger类 {public static void main(String[] args) {//1.把整数转为二进制String str1 Integer.toBinaryString(100);System.out.println(str1);//1100100//2. 把整数转为八进制String str2 Integer.toOctalString(100);System.out.println(str2);//144//3. 把整数转为十六进制String str3 Integer.toHexString(100);System.out.println(str3);//64//4.将字符串类型的整数转化为int类型的整数//强类型语言:每种数据在java中都有各自的数据类型// 在计算的时候如果不是同一种数据类型是无法直接计算的。int i Integer.parseInt(123);System.out.println(i);//123System.out.println(i1);//124—数据转化成功}
}
二、集合进阶
2.1 集合的体系结构 List系列集合:添加的元素是有序、可重复、有索引Set系列集合:添加的元素是无序不重复、无索引 2.1.1 Collection
Collection是单列集合的祖宗接口它的功能是全部单列集合都可以继承使用的 添加对象 1 .细节我们在添加元素的时候如果为List 类无论添加什么都是返回true添加成功因为List类可以重复 但是如果为Set类如果有重复的就会添加不成功返回false因为Set类不可以重复 //2. 添加对象coll.add(aaa);coll.add(ccc);coll.add(bbb);
// System.out.println(coll.add(bbb));//true删除对象 只有存在的元素才能删除所以不存在就会返回一个false反之true coll.remove(aaa);System.out.println(coll.remove(aaa));//true判断是否包含元素 底层原理是依赖equals方法进行判断的 如果在集合当中存储的是自定义的对象也想利用contains进行判断是否包含对象就必须在自定义对象的地方进行JavaBean处理重新来定义equals方法 coll.contains(bbb);System.out.println(coll.contains(bbb));//true判断集合是否为空长度为多少 //5. 判断集合是否为空coll.isEmpty();//6. 计算集合的长度coll.size();//22.2collection的遍历方式
迭代器遍历增强for遍历Lambda表达式遍历
2.2.1 迭代器遍历
特点不依赖索引
Collection集合获取迭代器
方法名称说明IteratorE iterator()返回迭代器对象默认指向当前集合的0索引
lterator中的常用方法:
方法名称说明boolean hasNext()判断当前位置是否有元素有元素返回true,没有元素返回falseE next()获取当前位置的元素并将迭代器对象移向下一个位置
遍历时的细节
1报错NoSuchElementException2迭代器遍历完毕指针不会复位3循环中只能用一次next方法4迭代器遍历时不能用集合的方法进行增加或者删除 若要删除可以使用Iterator里面的remove方法去除,增加元素
若要删除可以使用Iterator里面的remove方法去除
CollectionString coll new ArrayList();coll.add(aaa);coll.add(bbb);coll.add(ccc);coll.add(ddd);
IteratorString it coll.iterator();//4. 利用循环进行遍历集合while (it.hasNext()){String str it.next();//这个方法实现了1. 获取元素 2. 指针后移一位if(str.equals(bbb)){it.remove();}}System.out.println(coll);//aaa,ccc,ddd2.2.2 增强for遍历
原理 增强for的底层就是迭代器为了简化迭代器的代码书写的。它是JDK5之后出现的其内部原理就是一个iterator迭代器所有的单列集合和数组才能用增强for进行遍历 package 集合的进阶.ColectionDome;import java.util.ArrayList;
import java.util.Collection;public class ImportFor {public static void main(String[] args) {CollectionString coll new ArrayList();coll.add(aaa);coll.add(bbb);coll.add(ccc);//增强for遍历for (String s : coll) {System.out.println(s);}}
}
但是运用遍历的数据是第三方数据所以通过改变第三方数据是不能改变原来数组/集合的数据的
2.2.3 lambda遍历
利用匿名内部类的形式 底层原理就是自己利用for循环遍历出每一个元素把每一个元素传递给accept s依次表示集合中的每一个元素
package 集合的进阶.ColectionDome;import java.util.ArrayList;
import java.util.Collection;public class lambda {public static void main(String[] args) {CollectionString coll new ArrayList();coll.add(aaa);coll.add(bbb);coll.add(ccc);/* coll.forEach(new ConsumerString() {Overridepublic void accept(String s) {System.out.println(s);}});*///lambda表达式coll.forEach(s - System.out.println(s));}
}
2.2.4 列表迭代器 ListIterator
ListIterator与Iterator的区别 ListInterator可以添加元素 ListIteratorString its coll.listIterator();while (its.hasNext()){String next its.next();if(next.equals(bbb)){its.remove();its.add(hhhh);}System.out.println(next);}System.out.println(coll);}2.2.5 五种遍历方式对比
迭代器遍历:在遍历的过程中需要删除元素请使用迭代器 列表迭代器: 在遍历的过程中需要添加元素请使用列表迭代器 增强for遍历 \ Lambda表达式:仅仅想遍历那么使用增强for或Lambda表达式 普通for: 如果遍历的时候想操作索引可以用普通for.
2.3 List集合
有序:存和取的元素顺序一致有索引:可以通过索引操作元素可重复:存储的元素可以重复
List特有方法 Collection的方法List都继承了List集合因为有索引所以多了很多索引操作的方法 方法名称说明void add(int index,E element)在此集合中的指定位置插入指定的元素E remove(int index)删除指定索引处的元素返回被删除的元素E set(int index,E element)修改指定索引处的元素、返回被修改的元素E get(int index)返回指定索引处的元素
package 集合的进阶.ListDome;import java.util.ArrayList;
import java.util.List;public class listDome1 {public static void main(String[] args) {//1. 创建List对象ListString list new ArrayList();//2. 添加对象list.add(aaa);list.add(1,bbb);list.add(ccc);list.add(0,dddd);
// System.out.println(list);//[dddd, aaa, bbb, ccc]//3. 删除元素list.remove(1); //按照索引来删除元素list.remove(aaa);//按照元素来删除// 4. 修改元素list.set(1,fff);
// System.out.println(list);//[dddd, fff, ccc]//5. 查找元素System.out.println(list.get(1));//fff}
}
注意在remove当中若出现删除元素与index索引值一样就得
2.4 数据结构 数据结构是计算机底层存储、组织数据的方式是指数据相互之间是以什么方式排列在一起的。数据结构是为了更加方便的管理和使用数据需要结合具体的业务场景来进行选择一般情况下精心选择的数据结构可以带来更高的运行或者存储效率 2.4.1 栈
特点后进先出先进后出
2.4.2 队列
特点 先进先出后进后出
2.4.3 数组
查询速度快: 查询数据通过地址值和索引定位查询任意数据耗时相同。(元素在内存中是连续存储的) 删除效率低:要将原始数据删除同时后面每个数据前移 添加效率极低:添加位置后的每个数据后移再添加元素。
2.4.4 链表
结点链表当中的每一个元素 特点 链表中的结点是独立的对象在内存中是不连续的每个结点包含数据值和下一个结点的地址。链表查询慢无论查询哪个数据都要从头开始找。链表增删相对快 2.5 ArrayList
底层原理
利用空参创建的集合在底层创建一个默认长度为0的数组添加第一个元素时底层会创建一个新的长度为10的数组存满时会扩容1.5倍如果一次添加多个元素1.5倍还放不下则新创建数组的长度以实际为准
当添加第一个元素的时候 当添加大于10的元素时候
2.6 LinkedList集合 底层数据结构是双链表查询慢增删快但是如果操作的是首尾元素速度也是极快的。LinkedList本身多了很多直接操作首尾元素的特有API
特有方法说明public void addFirst(E e)在该列表开头插入指定的元素public void addLast(E e)将指定的元素追加到此列表的末尾public E getFirst()返回此列表中的第一个元素public E getLast()返回此列表中的最后一个元素public E removeFirst()从此列表中删除并返回第一个元素public E removeLast()从此列表中删除并返回最后一个元素
底层源码
iterator底层原理解析 2.7 泛型深入
泛型:是]DK5中引入的特性可以在编译阶段约束操作的数据类型并进行检查泛型的格式:数据类型注意:泛型只能支持引用数据类型
泛型的好处: 统一数据类型。把运行时期的问题提前到了编译期间避免了强制类型转换可能出现的异常因为在编译阶段类型就能确定下来 结论
如果没有给集合指定的类型默认所有的数据类型都是Object类型这个时候可以往集合里面添加任意的数据类型带来的坏处是我们在获取数据的时候无法使用他的特有行为
泛型的细节 泛型中不能写基本数据类型指定泛型的具体类型后传递数据时可以传入该类类型或者子类类型如果不写泛型类型默认是object 2.7.1 泛型类
使用场景:当一个类中某个变量的数据类型不确定时就可以定义带有泛型的类 此处E可以理解为变量但是不是用来记录数据的而是记录数据的类型可以写成:T、E、K、V等 书写的方法
package 集合的进阶.MyArrayList;import java.util.Arrays;public class MyArrayListE {//创建一个Object数组Object[] obj new Object[10];int size;//数组长度//E表示不确定要添加的数据类型e表示添加的数据public boolean add(E e){obj[size] e;//将数据存入size;return true;}public E get(int index) {return (E)obj[index];}//方法重写使得打印出来的list为StringOverridepublic String toString(){return Arrays.toString(obj);}
}调用的方法
package 集合的进阶.MyArrayList;public class Test {public static void main(String[] args) {//创建自己搭建的MyArrayListMyArrayListString list new MyArrayList();list.add(sada);list.add(sada123);list.add(sadsada);System.out.println(list);System.out.println(list.get(1));}
}
2.7.2 泛型方法
方法中形参类型不确定时 方案1:使用类名后面定义的泛型 所有方法都能用 方案2:在方法申明上定义自己的泛型 只有本方法能用 package 集合的进阶.LIstUtil;import java.util.ArrayList;public class listUtil {private listUtil(){}private static E void addAll(ArrayList list ,E e1,E e2){list.add(e1);list.add(e2);}
}
2.7.3 泛型接口
重点:如何使用一个带泛型的接口 方式1:实现类给出具体类型 方式2:实现类延续泛型创建对象时再确定
接口泛型
public class MyArrayList2E implements ListE {//接所有方法的重写
}测试
package 集合的进阶.MyArrayList;public class Test2 {public static void main(String[] args) {MyArrayList2String list2 new MyArrayList2String();list2.add(sadsad);//因为创建的是字符串类型所以只能添加字符串}
}
2.7.4 泛型的继承和通配符
泛型不具备继承性但是数据具备继承性 ? extends E: 表示可以传递E或者E所有的子类类型 ? super E:表示可以传递E或者E所有的父类类型 package 集合的进阶.MyArrayList;import java.util.ArrayList;public class MyArrayList4 {public static void main(String[] args) {//创建对象ArrayListYe list1 new ArrayList();ArrayListFu list2 new ArrayList();ArrayListZi list3 new ArrayList();ArrayListStudents list4 new ArrayList();methods(list1);methods(list2);methods(list3);
// methods(list4); //报错method2(list1);}private static void method2(ArrayList? super Zi list) {//创建表示可以传递Zi或者Zi所有的父类类型}private static void methods(ArrayList? extends Ye list) {//创建的是一个表示可以传递Ye或者Ye所有的子类类型}}
class Fu extends Ye{}
class Ye{}
class Zi extends Fu{}
class Students{}
但是数据具备继承性: ArrayListYe list1 new ArrayList(); list1.add(new Ye()); list1.add(new Fu()); list1.add(new Zi());
- 上一篇: 品牌建设公司排名济南seo整站优化价格
- 下一篇: 品牌平价网站建设课程网站建设规划
相关文章
-
品牌建设公司排名济南seo整站优化价格
品牌建设公司排名济南seo整站优化价格
- 技术栈
- 2026年03月21日
-
品牌官方网站建设郑州 网站建设有限公司
品牌官方网站建设郑州 网站建设有限公司
- 技术栈
- 2026年03月21日
-
品牌的佛山网站建设价格毕业设计做企业门户网站
品牌的佛山网站建设价格毕业设计做企业门户网站
- 技术栈
- 2026年03月21日
-
品牌平价网站建设课程网站建设规划
品牌平价网站建设课程网站建设规划
- 技术栈
- 2026年03月21日
-
品牌商城网站开发wordpress 360加速插件
品牌商城网站开发wordpress 360加速插件
- 技术栈
- 2026年03月21日
-
品牌商城网站制作公司网站主页设计注意点
品牌商城网站制作公司网站主页设计注意点
- 技术栈
- 2026年03月21日






