四.源码解读

本文介绍了Java中Arrays类的sort(), binarySearch(), copyOf(), fill()和toList()方法,以及Object类的equals(), getClass(), hashCode(), toString()等核心特性。重点讲解了Integer和String类,以及HashMap、HashSet和LinkedHashMap的使用和底层原理。

一.Arrays类

1.sort()

Arrays.sort(arr)

Arrays有多个重载的sort()方法,既可以按照自然顺序排序,也可以传入比较器参数定制顺序排序

2.index  binarySearch(arr,key)

3.copyOf:拷贝数组

  Arrays.copyOf(srcArray,newLength)

  System.arrayCopy(srcArray,0,destArray,0,length)

(1)int[] copyOf(int[] original, int newLength)    //original:原数组,newLength:新数组的长度

(2)底层采用 System.arraycopy() 实现,这是一个native方法。

void arraycopy(Object src,  int  srcPos,Object dest, int destPos,int length);  //length:拷贝的长度

4.fill(arr,val)

将数组中的元素全部替换成同一个元素

5.List asList(arr)

可以将一个数组快速的转换成List

1 String[] str = {"a","b","c"};
2 List<String> listStr = Arrays.asList(str);

注意:

(1)返回的数组的视图,所以只能查看,修改,不能增删,对list的修改,会反映到数组

(2)只能传入引用类型数组,不能传入基本类型数组

(4)已知数组数据,如何快速获取一个可进行增删改查的列表List

List<String> listStr = new ArrayList<>(Arrays.asList(str));
1 String[] str = {"a","b","c"};
2 List<String> listStr = new ArrayList<>(Arrays.asList(str));
3 listStr.add("d");
4 System.out.println(listStr.size());//4

6.Arrays.toString(arr)

返回数组内容的字符串形式,打印的时候比较有用,就不用遍历了

二.Objece类

Object类的方法有:(12种)

(1)类加载相关:getClass()  返回一个对象的运行时类

(2)需要重写:toString(),equals(o),hashCode()

(3)浅克隆:clone()

(4)垃圾回收:finalize()  jvm自动调用,一般不需要程序员手动去调用

(5)多线程通信方法:wait() *3,notify() / notifyAll()

(6)registerNatives方法:在类加载的时候是会执行该方法的,通过该方法来注册本地方法。

1.equals()方法

(1)没有重写,和 == 作用一样。String类重写了equals方法,用于比较两个对象的内容是否相等

(2)一般重写equals方法,都要重写hashCode方法。hashCode方法声明相等对象必须具有相同的哈希代码(对象相等,hashCode一定相等;hashCode相等,对象不一定相等),如果equals重写了,比较的是内容是否相等,那么也要重写hashCode方法,使得内容相同的两个对象返回相同的hashCode

2.getClass方法  返回一个对象的运行时类(得到一个对象的Class对象)Class对象就叫运行时类

获取Class对象的3种方法:对象.getClass(),类名.class,Class.forName(全限定类名)

(1)该方法的作用是返回一个对象的运行时类,通过这个类对象(Class对象)我们可以获取该运行时类的相关属性和方法。也就是Java中的反射

(2)Java中还有一种这样的用法,通过 类名.class 获取这个类的类对象 ,这两种用法有什么区别呢?

    结论:class 是一个类的属性(静态的),能获取该类编译时的类对象,而 getClass() 是一个类的方法,它是获取该类运行时的类对象。

3.hashCode方法  返回一个对象的哈希码

(1)在 JDK 的 Integer类,Float 类,String 类等都重写了 hashCode 方法,我们自定义对象也可以参考这些类来写。

4.toString()方法  返回一个对象的字符串表示

(1)默认返回:类名@hashCode

(2)打印对象时,默认调用 toString 方法,比如 System.out.println(person),等价于 System.out.println(person.toString())

三.Integer类

-128<=int <=127都被自动装箱到缓存中

(1)Integer的声明:public final class Integer extends Number implements Comparable<Integer>{}

  不可被继承,实现了Comparable接口

(2)方法:valueOf(str),parsInt(str)

      equals(i):比较包装类型是否相等要用equals方法

(3)compareTo(Integer anotherInteger)和compare(int x,int y)

    compareTo()内部直接调用了compare方法,按照字典序比较大小(x<y:返回-1,x==y:返回0,x>y:返回1)

1 System.out.println(Integer.compare(1, 2));//-1
2 System.out.println(Integer.compare(1, 1));//0
3 System.out.println(Integer.compare(1, 0));//1

四.String类

五:ArrayList类

1.字段属性

(1)默认大小:10(2)Object[] elementData:存储元素的数组(3)size

2.构造方法

public ArrayList(Collection<? extends E> c)  将已有的集合复制到ArrayList集合中去

3.方法

(1)当通过 ArrayList() 构造一个空集合,初始长度是为0的,第 1 次添加元素,会创建一个长度为10的数组

(2)遍历:普通for,

       迭代器iterator:如果在遍历的时候要删除元素,不能调用ArrayList的remove()方法,而是要调用迭代器的remove()方法。不能新增元素

       forEach:其实是迭代器的变种

       迭代器:ListIterator:相比于 Iterator 迭代器,这里的 ListIterator 多出了能向前迭代,以及能够新增元素。

六.LinkedList类

1.字段属性:size,Node first,Node last

2.遍历:for循环,迭代器

  迭代器比for循环效率高

七.HashMap类

1.java中的hashCode方法就是哈希函数,可以将一个对象的地址转换成哈希码(把对象地址当成key)

2.底层实现:jdk1.7及以前:数组+链表,jdk1.8开始:数组+链表+红黑树

3.HashMap的定义:HashMap是一个哈希表,它存储的是键值对,而且 key 和 value 都可以为 null

4.字段属性

  初始容量:16(必须是2的整数倍)(2)默认填充因子:0.75f

①、Node<K,V>[] table

③、loadFactor:负载因子

④、threshold:计算公式:capacity * loadFactor,阈值。过这个数目,就要resize

5.HashMap中的哈希算法:

把一个对象的hashCode进行取模运算:index=hashCode%tableSize。只不过对取模运算进行了优化:index=hashCode & (table.size-1)

      两个对象相等,hashCode一定相等。hashCode相等,两个对象不一定相等

      为什么重写equals方法的时候,要重写hashCode方法?

6.方法

(1)添加元素put(key,value)。如果key已经存在,则会覆盖value

(2)判断是否存在给定的 key 或者 value。  containsKey(Object key)  containsValue(Object value)

(3)遍历元素:keySet(),entrySet()

遍历方法:

  ①、分别获取 key 集合和 value 集合。

  ②、获取 key 集合,然后遍历key集合,根据key分别得到相应value

  ③、得到 Entry 集合,然后遍历 Entry

  ④、迭代

基本上使用第三种方法是性能最好的,

  第一种遍历方法在我们只需要 key 集合或者只需要 value 集合时使用;

  第二种方法效率很低,不推荐使用;

  第四种方法效率也挺好,关键是在遍历的过程中我们可以对集合中的元素进行删除。

7.总结

  ①、基于JDK1.8的HashMap是由数组+链表+红黑树组成,当链表长度超过 8 时会自动转换成红黑树,当红黑树节点个数小于 6 时,又会转化成链表。相对于早期版本的 JDK HashMap 实现,新增了红黑树作为底层数据结构,在数据量较大且哈希碰撞较多时,能够极大的增加检索的效率。

  ②、允许 key 和 value 都为 null。key 重复会被覆盖,value 允许重复。

  ③、非线程安全

  ④、无序(遍历HashMap得到元素的顺序不是按照插入的顺序)

八.HashSet类

1.HashSet是基于HashMap实现的,所有的键值对中的value=PRESENT,PRESENT是一个Object对象

2.方法:查找:contains(key),增加:add(e),删除:remove(e)

    遍历:(1)forEach循环(2)迭代器

九.LinkedHashMap类

1.LinkedHashMap类基于HashMap实现,具有HashMap集合的所有特点。但LinkedHashMap是有序的,因为 LinkedHashMap 在 HashMap 的基础上单独维护了一个具有所有数据的双向链表,该链表保证了元素迭代的顺序。即:LinkedHashMap = HashMap + LinkedList

2.方法:查找,增加,删除。和HashMap中一样

    遍历:也是4种

十.LinkedHashSet类

1.基于LinkedHashMap实现

十二.TreeMap类

存的是键值对,但是可以根据键排序

1.字段属性

  ①、Comparator②、Entry

2.方法:查找,增加,删除。遍历

内容概要:本文设计了一种基于PLC的全自动洗衣机控制系统内容概要:本文设计了一种,采用三菱FX基于PLC的全自动洗衣机控制系统,采用3U-32MT型PLC作为三菱FX3U核心控制器,替代传统继-32MT电器控制方式,提升了型PLC作为系统的稳定性与自动化核心控制器,替代水平。系统具备传统继电器控制方式高/低水,实现洗衣机工作位选择、柔和过程的自动化控制/标准洗衣模式切换。系统具备高、暂停加衣、低水位选择、手动脱水及和柔和、标准两种蜂鸣提示等功能洗衣模式,支持,通过GX Works2软件编写梯形图程序,实现进洗衣过程中暂停添加水、洗涤、排水衣物,并增加了手动脱水功能和、脱水等工序蜂鸣器提示的自动循环控制功能,提升了使用的,并引入MCGS组便捷性与灵活性态软件实现人机交互界面监控。控制系统通过GX。硬件设计包括 Works2软件进行主电路、PLC接梯形图编程线与关键元,完成了启动、进水器件选型,软件、正反转洗涤部分完成I/O分配、排水、脱、逻辑流程规划水等工序的逻辑及各功能模块梯设计,并实现了大形图编程。循环与小循环的嵌; 适合人群:自动化套控制流程。此外、电气工程及相关,还利用MCGS组态软件构建专业本科学生,具备PL了人机交互C基础知识和梯界面,实现对洗衣机形图编程能力的运行状态的监控与操作。整体设计涵盖了初级工程技术人员。硬件选型、; 使用场景及目标:I/O分配、电路接线、程序逻辑设计及组①掌握PLC在态监控等多个方面家电自动化控制中的应用方法;②学习,体现了PLC在工业自动化控制中的高效全自动洗衣机控制系统的性与可靠性。;软硬件设计流程 适合人群:电气;③实践工程、自动化及相关MCGS组态软件与PLC的专业的本科生、初级通信与联调工程技术人员以及从事;④完成PLC控制系统开发毕业设计或工业的学习者;具备控制类项目开发参考一定PLC基础知识。; 阅读和梯形图建议:建议结合三菱编程能力的人员GX Works2仿真更为适宜。; 使用场景及目标:①应用于环境与MCGS组态平台进行程序高校毕业设计或调试与运行验证课程项目,帮助学生掌握PLC控制系统的设计,重点关注I/O分配逻辑、梯形图与实现方法;②为工业自动化领域互锁机制及循环控制结构的设计中类似家电控制系统的开发提供参考方案;③思路,深入理解PL通过实际案例理解C在实际工程项目PLC在电机中的应用全过程。控制、时间循环、互锁保护、手动干预等方面的应用逻辑。; 阅读建议:建议结合三菱GX Works2编程软件和MCGS组态软件同步实践,重点理解梯形图程序中各环节的时序逻辑与互锁机制,关注I/O分配与硬件接线的对应关系,并尝试在仿真环境中调试程序以加深对全自动洗衣机控制流程的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值