String类为什么是final的
两点:
- 为了效率,如果不是final修饰使用率高可能会降低程序的性能
- 为了安全,JDK中提供的好多核心类是String类,如果不是final修饰可能会被继承重写,成为直接攻击操作系统代码
String、StringBuffer、StringBuilder区别与联系
三者都代表字符串。
最早出现的是String,因为String被final修饰无法更改,会导致内存浪费的问题,而StringBuffer和StringBuild的出现解决了String内存浪费的问题。
StringBulid是在JDK1.5版本出现的,对于StringBuffer来说,StringBuild是线程不安全的,而StringBuffer是线程安全的。但同时,StringBuffer效率低。
为了节省空间和提高效率,应该选择使用的是StringBuild。
String类型是基本数据类型吗?
不是,它是引用数据类型。(java.lang.String)
java.sql.Date和java.util.Date
java.sql.Date是java.util.Date的子类
java.sql.Date就是与数据库Date相对应的一个类型,而java.util.Date是纯java的Date。
java.util.Date 就是Java的日期对象,而java.sql.Date 是针对SQL语句使用的,只包含日期而没有时间部分
Java集合体系结构
Collection和Map是平行关系
Collection有List和Set组成,List分为ArrayList和LinkedList,Set分为hashSet和TreeSet组成
Map包含hashMap和TreeMap
Vector和ArrayList的区别和联系
实现原理相同,功能相同,都是长度可变的数组结构,很多情况下可以互用
- Vector是早期JDK接口,ArrayList是替代Vector的新接口
- Vector线程安全,ArrayList重速度轻安全,线程非安全
- 长度需增长时,Vector默认增长一倍,ArrayList增长50%
ArrayList和LinkedList的区别和联系
- 两者都实现了List接口,都具有List中元素有序、不唯一的特点。
- ArrayList实现了长度可变的数组,遍历和随机访问元素效率高
- LinkedList底层结构是链表结构,插入,删除效率高
Collection和Collections的区别
Collection是Java提供的集合接口,存储一组不唯一,无序的对象。
Collections是专门操作集合的类,它提供一系列静态方法实现对各种集合的搜索,排序,线程安全化等操作。
为什么引入集合
第一,集合符合面向对象的思想。
第二,集合灵活,可以存储多种不同数据类型的元素
- 集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性调用即可实现各种复杂操作,进而大大提高软件的开发效率。