String类,ArrayList,LinkedList,HashSet,LinkedHashSet,TreeSet,==个equals的区别,lambda表达式
String 字符串常量以“abc”形式创建的String对象会存放在堆内存的常量池中每个字符串对象只会被创建一次。多个引用对象指向在创建同一个字符串对象时系统不会创建多个字符串常量多个引用对象指向同一个字符串常量。字符串常量是不能够被修改的每次对字符串常量进行操作都会创建一个新的存放在堆内存中的新的对象原来的字符串常量不会被改变。单列集合collection接口-》list, set接口--》list的实现类(ArrayList, LinkedList), set的实现类(HashSet, LinkedHashSet, treeSet)List是有索引的ArrayListArrayList底层是通过数组来实现的在ArrayList被添加第一个元素时被初始化分配大小为10的数组每当list满的时候会扩容为原来的1.5倍然后将原数组中的数据拷贝到新的数组中。ArrayList有序 可重复 有索引 arrayList可以通过get方法直接查找到元素所以ArrayList的查询效率很高但是每次增加和删除的时候都要移动元素或者扩容导致效率很低所以arrayList常用在查询频繁但是增加和删除较少的场景中。LinkedListlinkedList是基于双链表实现的LinkedList有序 可重复 有索引LinkedList增删效率很高查询效率较低。HashSetHashSet底层实现是基于数组 链表和红黑树 实现的。初始化是一个长度为16的数组加载因子为0.75也就是说当数组达到12个元素时就会扩容为原来的两倍添加元素是根据元素的哈希值对数组长度取余来确定元素在数组中的位置的然后查看数组中是否有元素如果没有就存入如果有就和该元素进行equals对比如果对比结果为true就舍弃当前元素如果结果为false就方到该元素链表的下面。当链表长度超过8且数组长度 64时链表会自动转换成红黑树HashSet是增删改查效率都可以的数据类型无序 不重复 无索引。HashSet的元素对象重写equals和hashCode方法可以实现属性值相同的不同对象的去重。LinkedHashSetLinkedHashSet采用双链表来记录节点的前节点和后节点所以LinkedHashSet是有序的不重复 无索引。TreeSetTreeSet是基于红黑树来实现的自动排序 不重复 无索引的数据结构。元素对象通过实现 Comparable 接口 的 compareTo方法可以指定排序规则。通过调用TreeSet集合有参数构遗器可以设置Comparator对象比较器对象用于指定比依规则和equals的区别可以对基本数据类型和引用类型进行比较对于基本数据类型是值比较对于引用数据类型是地址值比较equals只能对引用类型进行比较object类的equals方法是通过实现的此时对于引用类型也是对地址值进行比较子类可以重写equals方法实现属性值比较。String的equals是属性值比较Lambda表达式对于函数式接口的匿名类可以使用lambda进行简写()-{} /a - system.out.println函数式接口是只有一个抽象方法的接口HashMap,LinkedHashMap, TreeMapHashSet的底层是通过HashMap来实现的LinkedHashSet底层是LinkedHashMap,TreeSet底层是TreeMap实现原理和set是一致的