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

php精品网站建设最新热搜新闻

php精品网站建设,最新热搜新闻,网站程序模块,wordpress文章缩略图地址标签Java的集合中主要由List#xff0c;Set#xff0c;Queue#xff0c;Map构成#xff0c;Set特点#xff1a;存取无序#xff0c;不可以存放重复的元素#xff0c;不可以用下标对元素进行操作。 HashSet 作为Set容器的代表子类#xff0c;HashSet经常被用到#xff0c…Java的集合中主要由ListSetQueueMap构成Set特点存取无序不可以存放重复的元素不可以用下标对元素进行操作。 HashSet 作为Set容器的代表子类HashSet经常被用到我们通过源码去分析它 public class HashSetEextends AbstractSetEimplements SetE, Cloneable, java.io.Serializable {private transient HashMapE,Object map;// Dummy value to associate with an Object in the backing Mapprivate static final Object PRESENT new Object();public HashSet() {map new HashMap();}public boolean add(E e) {return map.put(e, PRESENT)null;}public boolean remove(Object o) {return map.remove(o)PRESENT;} } 虽然HashSet实现了Set接口但通过源码可以看到它的底层逻辑实现其实依据的是HashMap通过操作map的key值来实现元素的增删改查下面通过一个小测试类去用下HashSet。 public class Test {public static void main(String[] args) throws FileNotFoundException {// 创建一个新的HashSetHashSetInteger set new HashSet();// 添加元素set.add(3);set.add(4);set.add(0);set.add(1);set.add(4);// 输出HashSet的元素个数System.out.println(HashSet size: set.size());// 判断元素是否存在于HashSet中boolean containsWanger set.contains(2);System.out.println(containsWanger);// 删除元素boolean removeWanger set.remove(1);System.out.println(set);// 修改元素需要先删除后添加boolean removeChenmo set.remove(3);boolean addBuChenmo set.add(4);System.out.println(removeChenmo addBuChenmo);// 输出修改后的HashSetSystem.out.println(set);} } 输出 HashSet size: 4 false [0, 3, 4] false [0, 4] 由代码结果进一步证明了我们的结论1、存储数据不重复但add重复数据并不报错原因是第一个数据会被第二次重复数据覆盖掉2无序很多人发现输出了一个有序的数字集合这个其实与我们所说的有序是有区别的在Set中的有序无序是指输入的顺序与输出的顺序是否一致 当然想要实现有序可以通过LinkedHashSet底层通过链表记录元素插入顺序。 这里会有一个问题集合中的无序性和不可能重复性是什么意思 无序性所谓无序性不等于随机性也不等于输出无序就如同上面我们看到的向HashSet中随机添加数字输出是从大到小看似有序实际此序非彼序真正的无序性是指存储的数据在底层数组中并非按照数组索引的顺序添加 而是根据数据的哈希值进行判断。 不可重复性指添加的元素按照 equals() 判断时 返回 false因此实现不可重复性必须要同时重写 equals() 方法和 hashCode() 方法。 LinkedHashSet 那么就有一个问题“我就想存一个不重复的数据集合同时又想要他们有序怎么办呢”Java中用LinkedHashSet就可以解决了LinkedHashSet 是基于 LinkedHashMap 实现的并且使用链表维护了元素的插入顺序具有快速查找、插入和删除操作的优点又可以维护元素的插入顺序下面展示测试案例。 LinkedHashSetString set new LinkedHashSet(); // 添加元素 set.add(Hello); set.add(Java); set.add(Build); set.add(Java); System.out.println(set); // 删除元素 set.remove(Hello);// 修改元素 set.remove(Java); set.add(java);// 查找元素 boolean bool set.contains(Build); System.out.println(哈喽: bool);//输出 System.out.println(set); 输出 [Hello, Java, Build] 哈喽:true [Build, java] 通过输出结果我们可以得出结论LinkedHashSet中的元素不可重复有序。 TreeSet 通过上面两个集合类我们大概能够猜到几乎所有的Set集合的底层都是通过Map去实现TreeSet同样是基于TreeMap实现TreeMap 基于红黑树实现所以TreeSet也就自带了排序功能。 public TreeSet() {this(new TreeMapE,Object());}示例 public class Test {public static void main(String[] args) {// 创建一个 TreeSet 对象TreeSetInteger set new TreeSet();set.add(3);set.add(6);set.add(2);set.add(1);set.add(0);set.add(9);System.out.println(set);} } 输出 [0, 1, 2, 3, 6, 9] 总结 HashSet、LinkedHashSet 和 TreeSet 都是 Set 接口的实现类都能保证元素唯一并且都不是线程安全的。 HashSet、LinkedHashSet 和 TreeSet 的主要区别在于底层数据结构不同。HashSet 的底层数据结构是哈希表基于 HashMap 实现。LinkedHashSet 的底层数据结构是链表和哈希表元素的插入和取出顺序满足 FIFO。TreeSet 底层数据结构是红黑树元素是有序的排序的方式有自然排序和定制排序。 底层数据结构不同又导致这三者的应用场景不同。HashSet 用于不需要保证元素插入和取出顺序的场景LinkedHashSet 用于保证元素的插入和取出顺序满足 FIFO 的场景TreeSet 用于支持对元素自定义排序规则的场景。 此外HashSet、LinkedHashSet允许有 null 值TreeSet不允许有null值当向 TreeSet 插入 null 元素时TreeSet 使用 compareTo 方法与 null 元素进行比较报错java.lang.NullPointerException。
http://www.hkea.cn/news/14587371/

相关文章:

  • 南京鼓楼做网站的公司升学宴ppt免费模板下载
  • 自己搭建网站dedecms 网站安全
  • 采购网站官网制作企业网站价格
  • 东莞专业网站建设网站建设资料清单
  • 个人网站素材下载12306网站很难做吗
  • 网站ftp上传到空间做個app网站价格
  • 网站域名和网址网络架构 书籍
  • 免费建自己的网站赚钱周口在线网站建设
  • 关键词百度指数查询长沙优化排名推广
  • 西安 网站建设 费用网站建设实现后台数据导出excel
  • 万家建设有限公司网站重庆南岸营销型网站建设公司哪家好
  • 网站怎么放404页面网站建设搜索
  • 凡科网站建设7个基本流程腾讯域名怎么建设网站
  • 湘潭做网站 i磐石网络关于网站建设的可行性报告
  • 网站建设的建议例子网易企业邮箱手机上登录不了
  • 定制企业网站建设哪家好网店美工课程总结
  • 免费开源网站建设系统动物网站建设
  • 网站增长期怎么做店铺网络推广方案
  • 好的网站建设公司有哪些wordpress找不到后台
  • 怎样创建网站dw如何做网络营销推广就属金手指饣
  • 刚做的网站适合做外链吗深圳公司网络推广该怎么做
  • 自己做网站还有出路吗企业网站怎么扣费的
  • 检测网站是否安全广州越秀区酒店推荐
  • wordpress超炫模板南宁seo规则
  • 娄底网站推广农业电商网站建设方案
  • 网站建设毕业设计 任务书企业网站设计中常见的排版类型
  • 国外界面设计网站军博网站建设公司
  • 怎么创建私人网站创作图片的软件
  • 当当网站建设优点论坛网站备案流程图
  • 营销型网站案例分析备案用的网站建设规划书怎么写