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

互诺 外贸网站建设wordpress建站案例

互诺 外贸网站建设,wordpress建站案例,网站404怎么做的,白云区今天最新消息Collection1.Collection有哪些类#xff1f;Java集合框架中的Collection接口是所有集合类的基础接口#xff0c;定义了一些基本的集合操作#xff0c;如添加元素、删除元素、判断是否包含某个元素等。常见的集合类包括List、Set和Queue。ListList接口定义了按照索引访问和操…Collection1.Collection有哪些类Java集合框架中的Collection接口是所有集合类的基础接口定义了一些基本的集合操作如添加元素、删除元素、判断是否包含某个元素等。常见的集合类包括List、Set和Queue。ListList接口定义了按照索引访问和操作元素的方法。它允许元素重复并且有序。在List中可以使用get()和set()方法访问指定位置的元素使用add()和remove()方法添加和删除元素。常见的List实现类有ArrayListArrayList 是一个基于动态数组的实现支持随机访问插入和删除操作效率低。LinkedList底层使用双向链表实现插入和删除操作效率高但随机访问效率低。Vector与ArrayList类似但是线程安全效率较低。SetSet接口表示一个不允许有重复元素的集合实现类必须重写equals()方法和hashCode()方法。常见的Set实现类有HashSet底层使用哈希表实现无序元素唯一。LinkedHashSet底层使用哈希表和链表实现有序元素唯一。TreeSet底层使用红黑树实现有序元素唯一。QueueQueue接口表示一个先进先出FIFO的队列。常见的Queue实现类有LinkedList底层使用链表实现效率较高LinkedList实现了Queue接口它支持在队列的头部和尾部进行元素的添加和删除操作因此可以被用作栈、队列和双端队列。。PriorityQueue是一种基于优先级堆的Queue它保证了每次取出的元素都是队列中优先级最高的元素。。需要注意的是这些集合类都是基于Object的如果需要在集合中存储特定类型的元素需要使用泛型。例如ListString表示一个只包含字符串元素的List。2.讲一下ArrayList的底层实现ArrayList 的底层实现基于数组它继承了 AbstractList 抽象类并实现了 List 接口。下面是一些关于 ArrayList 的底层实现的细节数组ArrayList 的内部实现是一个数组使用数组实现可以方便地进行随机访问根据索引直接访问指定位置的元素。自动扩容ArrayList 可以自动扩容以适应动态变化的容量需求每次扩容会增加 50% 的容量。元素的添加ArrayList 中的 add(E e) 方法会在末尾添加一个元素如果当前容量不足则会进行扩容。元素的删除ArrayList 中的 remove(int index) 方法会删除指定索引位置的元素将该位置后面的元素向前移动一位。3.ArrayList自动扩容的具体实现当调用ArrayList的add方法时如果当前列表中的元素数量已经达到容量的极限那么就需要自动扩容。扩容的过程就是创建一个新的数组并将原来数组中的元素复制到新数组中。默认情况下ArrayList的容量是10。当第一个元素被添加时内部数组会被初始化为长度为10的数组。当添加第11个元素时原始数组将会被复制到一个新的长度为15的数组中容量增加了50%。如果再添加元素当超过了15个元素时内部数组将再次扩容到新的长度为22的数组中。当使用ensureCapacity方法增加数组容量时ArrayList使用给定参数的最大值和当前容量的大小来决定新的容量大小。private void ensureCapacityInternal(int minCapacity) {// 判断是否需要扩容if (elementData DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {minCapacity Math.max(DEFAULT_CAPACITY, minCapacity);}ensureExplicitCapacity(minCapacity); }private void ensureExplicitCapacity(int minCapacity) {modCount;// 判断是否需要扩容if (minCapacity - elementData.length 0) {grow(minCapacity);} }private void grow(int minCapacity) {int oldCapacity elementData.length;int newCapacity oldCapacity (oldCapacity 1);if (newCapacity - minCapacity 0) {newCapacity minCapacity;}if (newCapacity - MAX_ARRAY_SIZE 0) {newCapacity hugeCapacity(minCapacity);}elementData Arrays.copyOf(elementData, newCapacity); } 扩容操作的代价是很高的因此在实际使用时我们应该尽量避免数组容量的扩张。当我们可预知要保存的元素的多少时要在构造ArrayList实例时就指定其容量以避免数组扩容的发生。或者根据实际需求通过调用ensureCapacity方法来手动增加ArrayList实例的容量。4.ArrayList的Fail-Fast机制在 Java 中如果使用集合类的迭代器来遍历集合元素而同时修改了集合中的元素就有可能会发生 ConcurrentModificationException 异常。这是因为 Java 集合类的迭代器是快速失败fail-fast机制如果在迭代集合时集合发生了结构性变化例如添加或删除元素迭代器就会立即抛出异常而不是等到迭代完成再抛出异常。ArrayList 是一个支持随机访问的序列容器底层使用数组实现所以在对 ArrayList 进行并发操作时可能会出现不同步的问题因此 ArrayList 也使用了快速失败机制来保证线程安全。具体来说如果在对 ArrayList 进行迭代操作的同时对其进行增删改操作会导致 ArrayList 的 modCount修改次数和迭代器的 expectedModCount预期的修改次数不一致迭代器会立即抛出 ConcurrentModificationException 异常。以下是一个简单的示例代码用来演示 ArrayList 快速失败机制的工作原理ListInteger list new ArrayList(Arrays.asList(1, 2, 3, 4, 5, 6, 7)); IteratorInteger iterator list.iterator(); while (iterator.hasNext()) {Integer element iterator.next();if (element 2) {list.remove(element);} } 在上面的示例代码中我们在迭代过程中删除了元素 2这会导致 ConcurrentModificationException 异常的抛出。为了避免出现这种情况我们可以使用 Iterator 的 remove() 方法来进行元素的删除或者使用线程安全的集合类例如 CopyOnWriteArrayList。MAP1.Map有哪些实现类Java中的Map接口定义了一个键值对映射的数据结构可以通过给定的键快速查找对应的值。Map接口有很多实现类常见的有以下几种HashMap基于哈希表实现的Map支持null键和null值非线程安全的。LinkedHashMap基于哈希表和双向链表实现的Map可以按照插入顺序或者访问顺序遍历键值对非线程安全的。TreeMap基于红黑树实现的Map键值对按照自然顺序或者自定义顺序排序非线程安全的。ConcurrentHashMap线程安全的HashMap使用分离锁来控制并发访问支持高并发可以通过一定的控制减小锁的竞争。Hashtable早期Java版本中提供的线程安全的哈希表支持null键和null值但是效率较低已经被ConcurrentHashMap取代。PropertiesHashtable的子类用来读取和写入属性文件通常用于读取配置文件。除了以上这些常见的实现类还有一些其他的实现类比如WeakHashMap、IdentityHashMap、EnumMap等不过它们使用的较少一般只在特定场景下使用。2.HashMap的底层实现jdk7jdk8JDK7 的底层实现在 JDK7 中HashMap 是通过数组和链表的结合来实现的。其基本思路是将 key 通过哈希函数映射为数组下标将 value 存储在对应的数组元素中。如果不同的 key 映射到了同一个数组下标就会以链表的形式存储在该数组元素中。HashMap 在 JDK7 中的底层结构主要由两部分组成一个 Entry 数组和一个链表。其中Entry 是 HashMap 的基本单元它包含了 key、value 和指向下一个 Entry 的指针。当使用 put() 方法向 HashMap 中添加元素时会根据 key 的哈希值计算出在数组中的位置然后将 Entry 添加到该位置的链表中。如果两个不同的 key 哈希值相同那么它们会被放到同一个链表中形成一个链表结构。这就是 JDK7 中 HashMap 的基本实现原理。然而这种实现方式有一个严重的问题当链表过长时查询效率会大大降低因为需要遍历整个链表才能找到对应的元素。在极端情况下当所有的元素都映射到了同一个数组下标HashMap 的时间复杂度就会退化到 O(n)这就是所谓的哈希冲突问题。JDK8 的底层实现JDK8 中的 HashMap 对 JDK7 中的实现进行了优化主要是通过引入红黑树来解决链表过长的问题。当链表长度超过一定阈值时默认为 8链表就会转换为红黑树。这样在查询时如果在链表中需要遍历的节点数量超过了阈值就会使用红黑树进行快速查找从而提高了查询的效率。在 JDK8 中HashMap 的底层结构主要由三部分组成一个数组、一个链表和一个红黑树。当使用 put() 方法向 HashMap 中添加元素时如果对应数组下标上已经存在元素就会进行以下操作如果该元素是一个链表就将新元素追加到链表的末尾。如果该元素是一个红黑树就在树中查找 key 对应的节点然后将节点的 value 替换成新的 value。如果树中不存在对应的节点就将新元素添加到树中。如果该元素为 null就直接在该数组的位置插入新的 Entry。在 JDK8 中HashMap 的 get() 方法的实现方式也发生了变化。在查询时先根据 key 的哈希值计算出在数组中的位置然后判断该位置上的元素是否为 null。如果为 null则返回 null如果不为 null则判断该元素是链表还是红黑树。如果是链表则遍历链表寻找对应的元素如果是红黑树则在树中进行查找。JDK8 中 HashMap 的优化主要体现在两个方面引入红黑树解决链表过长的问题提高了查询效率。当链表长度超过一定阈值时将链表转换为红黑树避免了链表过长时查询效率下降的问题。除了对链表和红黑树的优化之外JDK 8 还对哈希函数进行了改进。在 JDK 8 中对于 key 的 hash 值不再采用传统的取模运算%计算哈希桶的索引而是采用了一种新的方式使用 key 的 hash 值高位和低位进行异或运算以此来增加哈希桶的分布性。这种新的方式能够更好地抵抗哈希冲突从而提高了 HashMap 的性能。HashMap 将插入元素时使用的方式从头插法改为了尾插法更好地支持并发操作。在多线程环境下头插法容易导致多线程竞争同一个桶位从而导致链表成环。成环后会导致链表转换成红黑树的操作失败进而影响整个 HashMap 的性能。而尾插法不会导致链表成环因此在多线程环境下更为安全。总的来说JDK8 中 HashMap 的底层实现相比于 JDK7 发生了较大的变化通过引入红黑树和优化哈希算法提高了 HashMap 的性能和稳定性。3.HashSet的底层实现HashSet 是基于 HashMap 实现的底层是一个 HashMap 对象。在 HashSet 中所有元素都是存储在一个 HashMap 的键上而这个键的值则是一个静态的 Object 常量通常是一个 dummy Object。因此HashSet 的实现过程可以简单概括为将所有元素作为 HashMap 的 key 存储而 value 为一个静态的 Object 对象。具体来说HashSet 就是在 HashMap 的基础上去掉了 value只保留了 key。在使用 HashSet 时我们只需要调用 HashMap 的 put() 方法把元素作为 key 插入 HashMap 中value 则使用一个常量对象例如 private static final Object PRESENT new Object()来占位即可。相比于 HashMapHashSet 的实现过程更为简单因为它只需要存储键而不需要存储值。因此HashSet 在大多数情况下比 HashMap 更加高效。同时由于 HashSet 也是基于 HashMap 实现的因此它们的底层实现也非常相似可以复用 HashMap 的很多特性。以下是 HashSet 的部分源码public class HashSetEextends AbstractSetEimplements SetE, Cloneable, java.io.Serializable {// HashSet 底层就是一个 HashMap所有元素作为 key 存储在 HashMap 中private transient HashMapE,Object map;// 常量对象用于占位private static final Object PRESENT new Object();public HashSet() {map new HashMap();}public boolean add(E e) {return map.put(e, PRESENT)null;} } 可以看到在 HashSet 中我们只需要调用 HashMap 的 put() 方法来将元素插入到 HashMap 中。这样做的好处是可以节省很多重复代码而且可以复用 HashMap 的很多特性。同时由于 HashSet 只存储键而不存储值因此在大多数情况下比 HashMap 更加高效。
http://www.dnsts.com.cn/news/148152.html

相关文章:

  • 学院网站建设优化设计四年级语文下册答案
  • seo网站怎么建设沈阳网站建设专家
  • 网站备案通讯地址国外建站数据
  • 重庆网站建设招聘信息软件合集
  • 体验好的网站长沙房价2023年最新房价
  • 有机生态农业网站模板你访问的网站正在建设
  • 哪里网站可以做微信头像WordPress怎么加入用户关注
  • wordpress教程网主题抖音seo查询工具
  • 建设电子商务网站需要什么设备餐饮品牌全案策划公司
  • 上海哪家做网站关键词排名外贸玩具网站
  • 网站开发资金来源网站怎么做镜像
  • 雄安建站服务正在建设的网站
  • 制作手机端网站运营网站
  • 郑州外贸网站建设商家网站中的分享怎么做
  • 网站下载图标深圳宝安seo外包
  • 做网站被骗五千多营销型网站建设xywlcn
  • 郑州计算机网站公司外贸网站做纸尿裤怎么样
  • 网站风格优势百度爱采购服务商查询
  • 做微信充值网站wordpress怎样添加轮播图
  • 网站基础建设英文h5手机网站建设哪家好
  • 如何注册域名和网站山西省网站
  • 上海大学生做网站的团队网站建设十年杜绝模板
  • 深圳网站建设制作设计平台城乡村建设规划许可证网站
  • 谷歌做新媒体运营的网站阜阳室内设计学校
  • 常平网站做网站要会写什么软件
  • 网站关键词设置技巧站内seo怎么做
  • 网站制作技术使用说明二级网站和自建网站有什么区别
  • 哪个网站有高清图片做pptwordpress后台不能拖动
  • 漳浦网站开发中山服装网站建设
  • 江苏城乡住房和城乡建设厅网站软件开发专业词汇