如何用wordpress做一个企业网站白山网站设计
如何用wordpress做一个企业网站,白山网站设计,微网站模板免费下载,新郑做网站集合类 集合#xff08;Collection#xff09;
1、 List列表 #xff1a; 有序 可重复
1、ArrayList : 数组列表 #xff0c;内部是通过Array实现#xff0c;对数据列表进行插入、删除操作时都需要对数组进行拷贝并重排序#xff0c;因此在知道存储数据量时#xff0c…集合类 集合Collection
1、 List列表 有序 可重复
1、ArrayList : 数组列表 内部是通过Array实现对数据列表进行插入、删除操作时都需要对数组进行拷贝并重排序因此在知道存储数据量时尽量初始化初始容量提升性能 。
2、LinkedList : 双向链表 每个元素都有指向前后元素的指针顺序读取的效率较高随机读取的效率较低
3、Vector : 向量 线程安全的列表与ArrayList 一样也是通过数组实现的
4、Stack : 栈 后进先出 LIFO 继承自Vector也是用数组线程安全的栈类型底层实现线程安全扩容方式特点ArrayList数组否初始容量是 10扩容因子是 0.5查询快增删慢LinkedList链表否没有扩容的机制查询慢增删快Vector数组是默认初始容量为10扩容因子是 1查询快增删慢
2、Queue队列有序 可重复
1、ArrayDeque : 数组实现的的双端队列 可以在队列两端插入和删除元素
2、LinkedList : 也属于双端队列
3、PriorityQueue : 优先队列 数组实现的二叉树 完全二叉树实现的小顶堆(可改变比较方法)3、Set集合 无序 不重复
1、HashSet 基于哈希实现的集合 链表形式
2、LinkedHashSet
3、TreeSet 红黑树结构 类型底层实现线程安全扩容方式特点HashSet基于HashMap实现否添加元素时table数组扩容为16加载因子为0.75无序LinkedHashSet基于LinkedHashMap否初始容量为16临界值为12以后再次扩容扩容2倍有序TreeSet基于TreeMap实现否容量翻倍有序
集合Collection和数组的区别
2、数组的长度是固定的集合长度是可以改变的提供很多成员方法。3、数组的存放的类型只能是一种基本类型/引用类型集合存放的类型可以不是一种(不加泛型时添加的类型是Object)。当将元素放入集合时它们会被转换成Object类型之后在访问集合中的元素时需要进行强制类型转换。这种设计虽然方便但也带来了类型不安全的隐患以及类型转换的性能损失。4、数组是java语言中内置的数据类型,是线性排列的,执行效率或者类型检查都是最快的。
工具
遍历集合Iterator 和 Enumeration操作集合Arrays 和 Collections
Map
1、HashMap 哈希映射 无序 key 和 value 都可以为null
2、TreeMap 红黑树实现的, 可排序 红黑树是一种自平衡二叉查找树
3、LinkedHashMap 链表映射 继承于HashMap,又实现了双向链表的特性 保留了元素插入顺序 类型底层实现线程安全扩容方式特点HashMap数组红黑树否初始容量是 162倍扩容无序集合LinkedHashMap基于HashMap并自己维持了一个双向链表按照插入顺序进行访问实现了LRU算法否初始容量是 162倍扩容有序集合CocurrentHashMapSegments数组ReentrantHashMap(作为互斥锁来控制并发访问)链表采用分段锁保证安全是链表元素超8个数组大小超64转红黑树无序集合性能比HashTable好HashTable数组链表是初始大小为11扩容为2n1无序集合TreeMap基于红黑树不2倍有序集合 List有序、可重复。Set无序、不可重复的集合。重复元素会覆盖掉。Map键值对键唯一、值不唯一。Map 集合中存储的是键值对键不能重复值可以重复。 LinkedHashMap
LinkedHashMap继承自 HashMap在 HashMap 基础上通过维护一条双向链表解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。在一些场景下该特性很有用比如缓存。 LinkedHashMap实现LRU
accessOrder用于决定具体的迭代顺序
当accessOrder标志位为true时put和get方法均有调用recordAccess方法将当前访问的Entryput进来的Entry或get出来的Entry移到双向链表的尾部双向链表中的元素按照访问的先后顺序排列。
当标志位accessOrder的值为false时只有put方法会调用recordAccess即每次put到LinkedHashMap中的Entry都放在双向链表的尾部按照Entry插入LinkedHashMap到中的先后顺序排序
public class LRUK,V extends LinkedHashMapK, V implements MapK, V{private static final long serialVersionUID 1L;public LRU(int initialCapacity,float loadFactor,boolean accessOrder) {super(initialCapacity, loadFactor, accessOrder);}/** * description 重写LinkedHashMap中的removeEldestEntry方法当LRU中元素多余6个时* 删除最不经常使用的元素 **/Overrideprotected boolean removeEldestEntry(java.util.Map.EntryK, V eldest) {// TODO Auto-generated method stubif(size() 6){return true;}return false;}public static void main(String[] args) {LRUCharacter, Integer lru new LRUCharacter, Integer(16, 0.75f, true);String s abcdefghijkl;for (int i 0; i s.length(); i) {lru.put(s.charAt(i), i);}System.out.println(LRU中key为h的Entry的值为 lru.get(h));System.out.println(LRU的大小 lru.size());System.out.println(LRU lru);}
}hashMap和LinkedHashMap区别
插入顺序HashMap不保证映射的顺序而LinkedHashMap会根据元素插入的顺序维护一个双向链表因此保证了映射的顺序可以通过get操作访问元素的插入顺序。迭代顺序LinkedHashMap迭代元素的顺序是插入顺序而HashMap的迭代顺序是随机的。性能由于LinkedHashMap在底层额外维护了一个双向链表因此在插入或删除元素时需要更多的操作因此LinkedHashMap的性能通常比HashMap要低内存占用通常比HashMap要高一些。
hashMap和TreeMap区别
插入顺序HashMap不保证映射的顺序而TreeMap会根据元素的键值进行排序因此保证了映射的顺序。元素访问时间复杂度HashMap的元素访问时间复杂度是常数级别的即O(1)而TreeMap的元素访问时间复杂度是基于红黑树的复杂度通常是O(log(n))。键的类型HashMap可以使用任何类型的对象作为键只要它们能正确的实现hashCode()和equals()方法而TreeMap的键必须实现Comparable接口或提供自定义的Comparator比较器来进行比较。内存占用由于TreeMap需要维护红黑树的结构因此它的内存占用相对较高。而HashMap在元素较少时占用内存较小。
HashMap原理 HashMap在Jdk1.8以后是基于数组链表红黑树来实现的特点是key不能重复可以为null线程不安全 HashMap的扩容机制
HashMap的默认容量为16默认的负载因子为0.75当HashMap中元素个数超过容量乘以负载因子的个数时就创建一个大小为前一次两倍的新数组再将原来数组中的数据复制到新数组中。当数组长度到达64且链表长度大于8时链表转为红黑树
HashMap存取原理
1计算key的hash值然后进行二次hash根据二次hash结果找到对应的索引位置
2如果这个位置有值先进性equals比较若结果为true则取代该元素若结果为false就使用高低位平移法将节点插入链表
为什么不一开始就使用红黑树
因为直接采用红黑树的话每次加入元素需要进行平衡而在超过8时再旋转变为红黑树可以达成平衡因为大部分哈希槽的元素个数正态分布在8个左右所以此时变为红黑树也满足了查找的效率。
- 想要线程安全的哈希表
1使用ConcurrentHashMap
2使用HashTable
3Collections.synchronizedHashMap()方法## hash表
构造① 直接定址法②平方取中法③折叠法④除留取余法
冲突解决① 开放定址法线性探测② 链地址法HashTable与HashMap的区别 1HashTable的每个方法都用synchronized修饰因此是线程安全的但同时读写效率很低 2HashTable的Key不允许为null 3HashTable只对key进行一次hashHashMap进行了两次Hash 4HashTable底层使用的数组加链表
ConcurrenHashMap与HashTable的区别
ConcurrentHashMap性能更高它基于分段锁CAS 保证线程安全分段锁基于 synchronized 实现它仅仅锁住某个数组的某个槽位而不是整个数组
ConcurrentHashMap 没有大量使用 synchronsize 这种重量级锁。而是在一些关键位置使用乐观锁(CAS), 线程可以无阻塞的运行。ConcurrentHashMap读方法没有加锁ConcurrentHashMap扩容时老数据的转移是并发执行的这样扩容的效率更高。
ArrayList和LinkedList的区别
ArratList的底层使用动态数组默认容量为10当元素数量到达容量时生成一个新的数组大小为前一次的1.5倍然后将原来的数组copy过来
因为数组有索引所以ArrayList查找数据更快但是添加数据效率更低
LinkedList的底层使用链表在内存中是离散的没有扩容机制LinkedList在查找数据时需要从头遍历所以查找慢但是添加数据效率更高
如何保证ArrayList的线程安全
1使用collentions.synchronizedList方法为ArrayList加锁
2使用VectorVector底层与Arraylist相同但是每个方法都由synchronized修饰速度很慢在Queue接口中 poll() 和 remove() 方法都用于从队列中移除并返回队头的元素。
如果队列为空即没有元素可供移除时, pol0 方法会返回null。它是一个安全的方法不会抛出异常。
remove()在没有元素可供移除时会抛出NoSuchElementException 异常。怎么确保集合不可更改
Java 集合框架提供了一些不可变集合类如不可变列表ImmutableList、不可变集合ImmutableSet和不可变映射ImmutableMap。
ListString list ImmutableList.of(a, b, c);
SetString set ImmutableSet.of(x, y, z);
MapString, Integer map ImmutableMap.of(a, 1, b, 2, c, 3);
ListString list2 ImmutableList.Stringbuilder().addAll(list1).add(d).build();
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/86531.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!