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

电商网站技术方案自己做装修图网站

电商网站技术方案,自己做装修图网站,毕业设计网站建设软件项目,自己做的网站还用维护呢目录 一、Set二、HashSet三、HashSet的实现原理四、HashSet的线程安全与顺序1、线程安全2、有序性 一、Set Set 接口是 java.util 包下的一个集合接口#xff0c;它继承自 Collection 接口。Set 接口定义了一个不允许包含重复元素的集合。Set 接口的实现类主要有 HashSet、Lin… 目录 一、Set二、HashSet三、HashSet的实现原理四、HashSet的线程安全与顺序1、线程安全2、有序性 一、Set Set 接口是 java.util 包下的一个集合接口它继承自 Collection 接口。Set 接口定义了一个不允许包含重复元素的集合。Set 接口的实现类主要有 HashSet、LinkedHashSet 和 TreeSet。 以下是 Set 接口的一些关键特性 不包含重复元素Set 接口的实现类不允许集合中存在两个相等的对象。无序性大多数 Set 实现如 HashSet不保证集合的迭代顺序特别是它不保证该顺序恒久不变。唯一性Set 接口的 add 方法在添加元素时如果集合中已经存在该元素则不会再次添加。可选的排序某些 Set 实现如 TreeSet会根据其元素的自然顺序或者构造集合时所指定的比较器来对元素进行排序。 关键特性总结无序不重复、可选排序 Set 接口定义了以下方法 add(E e)添加元素如果元素已存在则返回 false否则添加后返回 true。remove(Object o)如果集合中存在该元素则移除它并返回 true否则返回 false。contains(Object o)检查集合是否包含指定元素。size()返回集合中的元素数量。isEmpty()检查集合是否为空。clear()移除集合中的所有元素。iterator()返回集合的迭代器。      二、HashSet HashSet 是 Java 集合框架中的一个非常常用的集合类它是 java.util包的一部分。HashSet继承自 AbstractSet 类实现了 Set接口。底层基于HashMap实现。只存储元素不存储键值对它不允许重复的元素。 private transient HashMapE,Object map;// Dummy value to associate with an Object in the backing Map private static final Object PRESENT new Object();/*** Constructs a new, empty set; the backing ttHashMap/tt instance has* default initial capacity (16) and load factor (0.75).*/ public HashSet() {map new HashMap(); }以下是 HashSet 的一些关键特性 不允许重复HashSet 不允许集合中有重复的元素。如果尝试添加一个已经存在的元素HashSet 会保持原样不会添加新元素。无序HashSet 不保证元素的顺序每次迭代集合时元素的顺序可能不同。基于哈希表HashSet 内部使用 HashMap 实现每个元素都作为 HashMap 的一个键而对应的值是一个虚拟对象通常是 HashSet 内部的一个静态对象。性能由于 HashSet 基于哈希表因此它在添加、删除和查找元素时通常提供常数时间的性能即 O(1) 时间复杂度但这取决于哈希函数的质量和冲突的数量。不保证线程安全HashSet 不是线程安全的。如果需要线程安全的集合可以使用 Collections.synchronizedSet(new HashSet()) 包装 HashSet或者使用 ConcurrentHashMap 的键集。可以包含 null 元素HashSet 允许包含一个 null 元素因为 HashMap 允许 null 作为键。迭代器HashSet 提供迭代器来遍历集合中的所有元素。 主要特性总结 无序不重复只存储元素不存储键值对线程不安全。 三、HashSet的实现原理 HashSet 是 Java 中的一个集合类它基于 HashMap实现。下面是 HashSet的实现原理 基于 HashMap HashSet 的内部实际上是使用一个 HashMap 来存储元素的。每个 HashSet 元素都作为 HashMap 的键而对应的值是一个固定的虚拟对象通常是一个静态的布尔值。 元素唯一性 由于 HashMap 的键是唯一的所以 HashSet 能够保证元素的唯一性。 添加元素 当你向 HashSet添加一个元素时它实际上是将该元素作为键添加到内部的 HashMap 中。 如果 HashMap 中已经存在这个键则 HashSet 会认为元素已经存在不会添加重复的元素。 public boolean add(E e) {return map.put(e, PRESENT)null; }删除元素 当你从 HashSet 删除一个元素时它实际上是从内部的 HashMap 中删除对应的键。 查找元素 当你检查 HashSet 是否包含某个元素时它实际上是在内部的 HashMap 中查找这个键。 迭代器 HashSet 的迭代器实际上是迭代内部 HashMap 的键集。 public IteratorE iterator() {return map.keySet().iterator(); }性能 HashSet 的添加、删除和查找操作的性能通常都是常数时间的O(1)这得益于 HashMap 的性能。 容量和加载因子 HashSet 继承了 HashMap 的容量和加载因子的概念这些参数影响 HashSet 的性能和内存使用。 并发性 HashSet不是线程安全的。如果你需要线程安全的集合可以使用 Collections.synchronizedSet(new HashSet(...)) 或者 ConcurrentHashMap 的键集。 序列化 HashSet 实现了 Serializable 接口这意味着它可以被序列化和反序列化。 四、HashSet的线程安全与顺序 1、线程安全 HashSet 是非线程安全的。这意味着多个线程同时修改 HashSet可能会导致不可预知的行为。如果多个线程需要访问和修改同一个 HashSet实例必须通过外部同步来确保线程安全。 如果你需要线程安全的 Set 集合可以考虑以下替代方案 Collections.synchronizedSet通过这个静态方法包装一个 HashSet可以提供简单的线程安全。但是这种方法的并发性能较低因为每次访问都需要获取锁。 ConcurrentHashMap 的 keySet 方法ConcurrentHashMap 提供了 keySet 方法它返回一个线程安全的 Set 视图。这个 Set 支持更高效的并发访问。 CopyOnWriteArraySet这是一个线程安全的 Set 实现它在每次修改添加或删除元素时都会复制整个底层数组。这种方法适用于读多写少的场景。 import java.util.Collections; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet;public class ThreadSafeSetExample {public static void main(String[] args) {// 使用 Collections.synchronizedSet 包装 HashSetSetString syncSet Collections.synchronizedSet(new HashSet());syncSet.add(Element1);syncSet.add(Element2);// 使用 CopyOnWriteArraySetSetString copyOnWriteSet new CopyOnWriteArraySet();copyOnWriteSet.add(Element1);copyOnWriteSet.add(Element2);// 迭代两个线程安全的 SetSystem.out.println(Synchronized Set: syncSet);System.out.println(CopyOnWriteArraySet: copyOnWriteSet);} }2、有序性 HashSet 不保证元素的顺序。它基于 HashMap实现而 HashMap不保证键的顺序。因此每次迭代 HashSet 时元素的顺序可能不同。 如果你需要一个有序的 Set 集合你可以考虑以下几种方法 TreeSet TreeSet 是一个有序的 Set集合它基于红黑树实现。TreeSet可以确保元素处于排序状态无论是按照自然顺序还是根据提供的 Comparator。 LinkedHashSet LinkedHashSet维护了元素的插入顺序或者在构造时指定的最近期访问顺序。它内部使用 LinkedList 来维护元素的顺序同时使用 HashMap 来保证元素的唯一性。 使用 HashSet 与额外的数据结构 如果你需要保留 HashSet 的所有特性并且只需要偶尔的顺序访问你可以在需要的时候将 HashSet 元素添加到一个 TreeSet或 LinkedHashSet 中进行排序操作。 import java.util.HashSet; import java.util.Set; import java.util.stream.Collectors;public class OrderedSetExample {public static void main(String[] args) {SetInteger hashSet new HashSet();hashSet.add(5);hashSet.add(1);hashSet.add(4);hashSet.add(2);// 仅在需要有序时进行排序SetInteger sortedSet hashSet.stream().collect(Collectors.toCollection(TreeSet::new));for (Integer number : sortedSet) {System.out.println(number);}} }自定义有序 Set实现 如果你有特殊的排序需求你可以创建自己的 Set 实现继承 AbstractSet 类并使用你选择的任何数据结构如数组、链表等来维护元素的顺序。
http://www.w-s-a.com/news/866868/

相关文章:

  • 网站价格网页制作网站开发实训步骤
  • cms 导航网站鹤壁做网站价格
  • 微信营销软件免费版郑州关键词优化费用
  • 邢台专业做网站哪家好临沂网站建设中企动力
  • 建设网站是主营成本吗wordpress 后台
  • 猎头可以做单的网站企业网站建设
  • 建小程序需要网站吗在putty上怎样安装wordpress
  • 天津智能网站建设找哪家WordPress相册插件pro
  • 电脑网站页面怎么调大小济宁网站建设软件开发
  • 亿玛酷网站建设广州增城区最新消息
  • 企业网站视频栏目建设方案中企动力网站模板
  • 网站页面策划国外注册域名的网站
  • 百中搜如何做网站排名网站维护一年一般多少钱
  • 镇江地区做网站的公司wordpress说说加分类
  • 深圳高端网站设计免费的关键词优化软件
  • 视频网站公司沈阳网站建设服务
  • 网站全屏代码做网站必须用对方服务器
  • 网站速度慢wordpressssl正式申请后wordpress
  • 那个网站做玉石最专业西瓜创客少儿编程加盟
  • 备案时的网站建设方案书免费软件库
  • 惠州外贸网站建设网站模板 兼容ie8
  • 南京淄博网站建设方案php网站开发实训感想
  • 网站设计的含义只做恐怖片的网站
  • 网站改版方案ppt室内装修公司简介
  • 做色网站wordpress twenty ten
  • 马鞍山建设工程监督站建管处网站免费的海报模板网站
  • 类似百度的网站移动端的网站怎么做的
  • 网站开发需要什么文凭网站分析的优劣势
  • 海尔网站建设不足之处山东网站营销
  • 楚雄 网站建设广告设计一般人能学吗