怎么做一个自己的网站中国建设银行官网站基金查询

当前位置: 首页 > news >正文

怎么做一个自己的网站,中国建设银行官网站基金查询,郑州美容网站建设,领地网怎么编辑个人网站1、List#xff0c;Set#xff0c;Map三者的区别 List#xff1a;一个有序#xff08;元素存入集合的顺序和取出的顺序一致#xff09;容器#xff0c;元素可以重复#xff0c;可以插入多个null元素#xff0c;元素都有索引。常用的实现类有 ArrayList、LinkedList 和…1、ListSetMap三者的区别 List一个有序元素存入集合的顺序和取出的顺序一致容器元素可以重复可以插入多个null元素元素都有索引。常用的实现类有 ArrayList、LinkedList 和 Vector。Set一个无序存入和取出顺序有可能不一致容器不可以存储重复元素只允许存入一个null元素必须保证元素唯一性。Set 接口常用实现类是 HashSet、LinkedHashSet 以及 TreeSet。Map是一个键值对集合存储键、值和之间的映射。 Key无序唯一value 不要求有序允许重复。Map 的常用实现类HashMap、TreeMap、HashTable、LinkedHashMap、ConcurrentHashMap。 2、集合框架底层的数据结构 List集合 Arraylist和Vector使用的是 Object 数组 LinkedList使用双向循环链表 Set集合 HashSet无序唯一基于 HashMap 实现的HashSet的值作为keyvalue是Object类型的常量LinkedHashSet继承HashSet并且通过 LinkedHashMap 来实现的TreeSet有序唯一 红黑树(自平衡的排序二叉树。 Map集合 HashMap由数组链表红黑树组成的数组是HashMap的主体链表则是主要为了解决哈希冲突而存在的当链表长度大于阈值默认为8并且数组长度大于64时将链表转化为红黑树LinkedHashMap有序 继承自 HashMap底层仍然是数组链表红黑树组成。另外LinkedHashMap 在此基础上节点之间增加了一条双向链表使得可以保持键值对的插入顺序HashTable无序数组链表组成的数组是 HashTable的主体链表则是主要为了解决哈希冲突而存在的TreeMap有序红黑树 3、集合框架的扩容 ArrayList和Vector默认初始容量为10当元素个数超过容量长度时都进行进行扩容ArrayList扩容为原来的1.5倍而Vector扩容为原来的2倍HashSet和HashMap默认初始容量为16加载因子为0.75即当元素个数超过容量长度的0.75倍时进行扩容扩容为原来的2倍。HashSet基于 HashMap 实现的因此两者相同HashTable默认初始容量为11加载因子为0.75扩容策略是2倍1如 初始的容量为11一次扩容后是容量为23 4、HashMap 的实现原理以及JDK1.7和JDK1.8的区别 实现原理 数组的特点是寻址容易插入和删除困难而链表的特点是寻址困难插入和删除容易。我们综合两者的特性做出一种寻址容易插入删除也容易的数据结构哈希表。并且使用最常用的一种方法—— 拉链法来实现哈希表。 数组存储的元素是一个Entry类这个类有三个数据域key、value键值对next(指向下一个Entry)。当两个key经过计算得到的index索引相同时即产生哈希冲突时用链地址法来解决哈希冲突即通过next属性将索引值相同的链接在一起。随着map的容量或者链表长度越来越大在进行进一步的优化比如使用红黑树。 存储过程 HashMap个put()方法 第一步首先将k,v封装成Node节点。第二步调用hashCode()方法得出hash值并将hash值转换成数组的下标下标位置上如果没有任何元素没有碰撞就把Node节点添加到这个位置上。如果说下标对应的位置上有值hash碰撞。碰撞的元素与要插入的元素key值相等直接进行value的更新如果key值不相同于是增长链表或者树节点的增加。插入之后判断是否进行扩容。 HashMap个get()方法 先调用k的hashCode()方法得出哈希值并转换成数组的下标。第二步通过数组下标快速定位到某个位置上。如果该位置上什么都没有则返回null。如果这个位置上有数据那么它就会拿着参数k和单向链表上(红黑树)的每一个节点的k进行equals如果所有equals方法都返回false则get方法返回null。如果其中一个节点的k和参数k进行equals返回true那么返回该节点的value。 区别 JDK1.7是数组链表无冲突时存放数组冲突时存放链表采用头插法。 JDK1.8是数组 链表 红黑树无冲突时存放数组有冲突存放链表或者红黑树当链表长度大于阈值默认为8并且数组长度大于64时将链表转化为红黑树树元素小于等于6时树结构还原成链表形式。 5、Arraylist与LinkedList区别 ArrayList是数组的数据结构LinkedList是链表的数据结构。随机访问的时候ArrayList的效率比较高因为LinkedList要移动指针而ArrayList是基于索引(index)的数据结构可以直接映射到。插入、删除数据时LinkedList的效率比较高因为ArrayList要移动数据。LinkedList比ArrayList开销更大因为LinkedList的节点除了存储数据还需要存储引用。 6、HashMap 的扩容过程  第一步把数组长度变为原来的两倍第二步把旧数组的元素重新计算hash插入到新数组中。jdk8时不用重新计算hash只用看看原来的hash值新增的一位是零还是1如果是1这个元素在新数组中的位置是原数组的位置加原数组长度如果是零就插入到原数组中。扩容过程第二步一个非常重要的方法是transfer方法采用头插法把旧数组的元素插入到新数组中。 7、哪些集合类是线程安全的哪些不安全 线性安全的 Vector比Arraylist多了个同步化机制。Hashtable比Hashmap多了个线程安全。ConcurrentHashMap:是一种高效但是线程安全的集合。Stack栈也是线程安全的继承于Vector。 线性不安全的 HashmapArraylistLinkedListHashSetTreeSetTreeMap 8、ArrayList 和 Vector 的区别是什么 Vector是线程安全的ArrayList不是线程安全的。ArrayList在底层数组不够用时在原来的基础上扩展0.5倍Vector是扩展1倍。Vector只要是关键性的操作方法前面都加了synchronized关键字来保证线程的安全性。 9、Collection与Collections的区别是什么 Collection是Java集合框架中的基本接口如List接口也是继承于它 publicinterfaceListEextendsCollectionE{} Collections是Java集合框架提供的一个工具类其中包含了大量用于操作或返回集合的静态方法。如下 publicstaticT extendsComparable?super Tvoid sort(ListT list){list.sort(null); } 10、如何决定使用 HashMap 还是TreeMap 这个点主要考察HashMap和TreeMap的区别。 TreeMap实现SortMap接口能够把它保存的记录根据键排序默认是按key的升序排序也可以指定排序的比较器。当用Iterator遍历TreeMap时得到的记录是排过序的。 11、数组和 List之间的转换 List 转Array必须使用集合的 toArray(T[] array)如果直接使用 toArray 无参方法返回值只能是 Object[] 类强转其他类型可能有问题。 Array 转List使用Arrays.asList() 把数组转换成集合时不能使用修改集合相关的方法。 PS需要注意的是asList() 返回的是一个视图view所以对该 List 进行添加、删除操作会直接影响到原数组的值而且还不支持 add()、remove()、clear() 操作不然会抛出 UnsupportedOperationException 异常该方法适用于只需要读取数组中数据的情况。如果想要对集合修改元素应该通过创建新的 List 进行修改。 可以这样使用弥补这个缺点 //方式一 ArrayListString arrayList newArrayListString(strArray.length); Collections.addAll(arrayList, strArray); //方式二 ArrayListString list newArrayListString(Arrays.asList(strArray)); 12、迭代器 Iterator 是什么怎么用有什么特点 publicinterfaceCollectionEextendsIterableE{ IteratorE iterator(); 方法如下 next()方法获得集合中的下一个元素hasNext()检查集合中是否还有元素remove()方法将迭代器新返回的元素删除forEachRemaining(Consumer?super E action)方法遍历所有元素 Iterator 主要是用来遍历集合用的它的特点是更加安全因为它可以确保在当前遍历的集合元素被更改的时候就会抛出 ConcurrentModificationException 异常。 使用demo如下 ListString list newArrayList(); IteratorString it list. iterator(); while(it. hasNext()){String obj it.next();System.out. println(obj); } 13、ArrayList集合加入1万条数据应该怎么提高效率 因为ArrayList的底层是数组实现,并且数组的默认值是10,如果插入10000条要不断的扩容,耗费时间,所以我们调用ArrayList的指定容量的构造器方法ArrayList(int size) 就可以实现不扩容,就提高了性能。