1、&&和&的区别
&:按位与
&&:逻辑与(短路与)
共同点:&和&&,二者都要求运算符左右两端布尔值都是true,整个表达式的值才为true。
不同点:如果&&左边表达式为false时,表达式右边运算直接被短路掉(不执行)。
2、List 、Set和Map 的区别
List 以索引来存取元素,有序的,元素是允许重复的,可以插入多个null;
Set 不能存放重复元素,无序的,只允许一个null;
Map 保存键值对映射;
List 底层实现有数组、链表两种方式;Set、Map 容器有基于哈希存储和红黑树两种方式实现;
Set 基于 Map 实现,Set 里的元素值就是 Map的键值。
3、Arraylist 与 LinkedList的区别
ArrayList基于动态数组实现;LinkedList基于链表实现。
对于随机index访问的get和set方法,ArrayList的速度要优于LinkedList。因为ArrayList直接通过数组下标直接找到元素;LinkedList要移动指针遍历每个元素直到找到为止。
新增和删除元素,LinkedList的速度要优于ArrayList。因为ArrayList在新增和删除元素时,可能扩容和复制数组;LinkedList实例化对象需要时间外,只需要修改指针即可。
4、HashSet、LinkedHashSet 和 TreeSet 的区别?
HashSet
是 Set
接口的主要实现类 ,HashSet
的底层是 HashMap
,线程不安全的,可以存储 null 值;
LinkedHashSet
是 HashSet
的子类,能够按照添加的顺序遍历;
TreeSet
底层使用红黑树,能够按照添加元素的顺序进行遍历,排序的方式可以自定义。