继承和实现的区别:
1.修饰符不同:
继承修饰符extends,实现修饰符implements
2.单继承,多实现,Java允许一个类仅能继承一个其他类,即一个类只能有一个父类,这个限制被称为单继承性,而接口允许多继承,弥补了Java类只能单继承的缺陷。
String str = new String("123");该过程首先由于"123"是一个字符串常量,他会被存储在字符串常量池中,在执行代码的时候,如果常量池里面已经有了"123",那么久不会再创建新的对象,而是直接引用常量池中已经存在的对象。然后new String()是一定会创建一个对象的;
List接口一共有三个实现类,分别是ArrayList、Vector和LinkedList。List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。3个具体实现类的相关区别如下:
1.ArrayList是最常用的List实现类,内部是通过数组来实现的,它允许对元素进行快速随机访问,数组的缺点是每个元素之前不能有间隔,当数组的大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中,当从ArrayList的中间位置插入或者删除元素的时候,需要对数组进行复制,移动,代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
2.Vector和ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但是实现同步要花很长的时间,因此,访问它比访问ArrayList慢
3.LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。
4.Vector是线程(Thread)同步(Synchronized)的,所以它也是线程安全的,而Arraylist是线程异步(ASynchronized)的,是不安全的。如果不考虑到线程的安全因素,一般用Arraylist效率比较高。
5.如果集合中的元素的数目大于目前集合数组的长度时,vector增长率为目前数组长度的100%,而arraylist增长率为目前数组长度的50%.如过在集合中使用数据量比较大的数据,用vector有一定的优势。Vector一次增加一倍长度,Arraylist一次增加一半长度
6.查找指定位置的数据花费时间:ArrayList和Vector都是O(1),而LinkedList是O(i);
移动指定位置的数据花费时间: ArrayList和Vector都是O(n-i),而LinkedList是O(1);
Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差
Java中的参数传递
Java中的参数传递是值传递的。对于基本数据类型,传递的是其值的副本;对于对象,传递的是其引用的副本。这意味着在方法中对基本数据类型进行修改不会影响原始值,但在方法中对对象属性的修改会影响原始对象
Java中的集合类和底层实现
- ArrayList:实现了可变大小的数组。它使用数组作为其底层数据结构。
- LinkedList:实现了链表数据结构。它使用双向链表作为其底层数据结构。
- HashSet:实现了基于哈希表的集合。它是通过HashMap实现的,底层使用HashMap的键来存储元素,值则被设置为一个固定的Object对象。
- TreeSet:实现了基于红黑树(自平衡二叉搜索树)的集合。它使用TreeMap作为其底层数据结构。
- HashMap:实现了基于哈希表的映射。它使用数组和链表(或红黑树)的组合来实现哈希桶。
- TreeMap:实现了基于红黑树的映射。它使用红黑树作为其底层数据结构。
- LinkedHashMap:实现了具有可预知迭代顺序的哈希表。它使用哈希表和双向链表的组合来实现。
- PriorityQueue:实现了优先队列(最小堆)。它使用数组来实现堆结构。
==和equals()
“==”和equals 最大的区别是
- “==”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值。
- equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值。
Java中线程池种类
- FixedThreadPool(固定大小线程池):该线程池维护固定数量的线程,适用于需要限制线程数量的场景。当线程池中的线程都在执行任务时,新任务会进入等待队列,直到有线程可用才会执行。
- CachedThreadPool(可缓存线程池):该线程池的线程数量不固定,会根据任务的数量自动调整。适用于执行大量短期任务的场景,当线程空闲超过指定时间(默认为60秒)时,线程会被销毁;而当任务量增加时,会重新创建新的线程处理任务。
- SingleThreadExecutor(单线程线程池):该线程池只包含一个线程,适用于需要保证任务按顺序执行的场景。当线程因异常退出时,会创建一个新的线程来替代,确保任务持续执行。
- ScheduledThreadPool(调度线程池):该线程池可用于执行定时任务和周期性任务,可以指定任务的执行时间或间隔时间。可以通过
接口提供的方法来安排任务的执行。ScheduledExecutorService
- WorkStealingPool(工作窃取线程池):该线程池是在Java 1.8版本引入的,基于Fork/Join框架实现,适用于执行大量并行任务的场景。线程池中的线程通过工作窃取算法,可以从其他线程的任务队列中获取任务并执行。
重写和重载
重写是子类对父类中已有方法的实现进行重新编写,方法名、参数列表和返回类型都必须相同;重载是在同一个类中定义多个具有相同方法名但参数列表不同的方法,它们具有不同的参数类型、参数个数或参数顺序。
事务的四大特性
原子性,一致性,隔离性,持久性
创建线程的三种方式
1.继承Thread类,
2.实现Runnable接口
3.实现Callable接口
Java集合
(5条消息) java集合超详解_phial03的博客-CSDN博客