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

静态网站开发一体化课程乐清发布网

静态网站开发一体化课程,乐清发布网,怎么查看网站外链效果,互联网营销师证书报名入口目录 5. Collection子接口2#xff1a;Set 5.1 Set接口概述 5.2 Set主要实现类#xff1a;HashSet 5.2.1 HashSet概述 5.2.2 HashSet中添加元素的过程#xff1a; 5.2.3 重写 hashCode() 方法的基本原则 5.2.4 重写equals()方法的基本原则 5.2.5 练习 5.3 Set实现类…目录 5. Collection子接口2Set 5.1 Set接口概述 5.2 Set主要实现类HashSet 5.2.1 HashSet概述 5.2.2 HashSet中添加元素的过程 5.2.3 重写 hashCode() 方法的基本原则 5.2.4 重写equals()方法的基本原则 5.2.5 练习 5.3 Set实现类之二LinkedHashSet 5.4 Set实现类之三TreeSet 5.4.1 TreeSet概述 5. Collection子接口2Set 5.1 Set接口概述 Set接口是Collection的子接口Set接口相较于Collection接口没有提供额外的方法 Set 集合不允许包含相同的元素如果试把两个相同的元素加入同一个 Set 集合中则添加操作失败。 Set集合支持的遍历方式和Collection集合一样foreach和Iterator。 Set的常用实现类有HashSet、TreeSet、LinkedHashSet。 5.2 Set主要实现类HashSet 5.2.1 HashSet概述 HashSet 是 Set 接口的主要实现类大多数时候使用 Set 集合时都使用这个实现类。 HashSet 按 Hash 算法来存储集合中的元素因此具有很好的存储、查找、删除性能。 HashSet 具有以下特点 不能保证元素的排列顺序 HashSet 不是线程安全的 集合元素可以是 null HashSet 集合判断两个元素相等的标准两个对象通过 hashCode() 方法得到的哈希值相等并且两个对象的 equals()方法返回值为true。 对于存放在Set容器中的对象对应的类一定要重写hashCode()和equals(Object obj)方法以实现对象相等规则。即“相等的对象必须具有相等的散列码”。 HashSet集合中元素的无序性不等同于随机性。这里的无序性与元素的添加位置有关。具体来说我们在添加每一个元素到数组中时具体的存储位置是由元素的hashCode()调用后返回的hash值决定的。导致在数组中每个元素不是依次紧密存放的表现出一定的无序性。 5.2.2 HashSet中添加元素的过程 第1步当向 HashSet 集合中存入一个元素时HashSet 会调用该对象的 hashCode() 方法得到该对象的 hashCode值然后根据 hashCode值通过某个散列函数决定该对象在 HashSet 底层数组中的存储位置。 第2步如果要在数组中存储的位置上没有元素则直接添加成功。 第3步如果要在数组中存储的位置上有元素则继续比较 如果两个元素的hashCode值不相等则添加成功 如果两个元素的hashCode()值相等则会继续调用equals()方法 如果equals()方法结果为false则添加成功。 如果equals()方法结果为true则添加失败。 第2步添加成功元素会保存在底层数组中。 第3步两种添加成功的操作由于该底层数组的位置已经有元素了则会通过链表的方式继续链接存储。 5.2.3 重写 hashCode() 方法的基本原则 在程序运行时同一个对象多次调用 hashCode() 方法应该返回相同的值。 当两个对象的 equals() 方法比较返回 true 时这两个对象的 hashCode() 方法的返回值也应相等。 对象中用作 equals() 方法比较的 Field都应该用来计算 hashCode 值。 注意如果两个元素的 equals() 方法返回 true但它们的 hashCode() 返回值不相等hashSet 将会把它们存储在不同的位置但依然可以添加成功。 5.2.4 重写equals()方法的基本原则 重写equals方法的时候一般都需要同时复写hashCode方法。通常参与计算hashCode的对象的属性也应该参与到equals()中进行计算。 推荐开发中直接调用Eclipse/IDEA里的快捷键自动重写equals()和hashCode()方法即可。 为什么用Eclipse/IDEA复写hashCode方法有31这个数字 首先选择系数的时候要选择尽量大的系数。因为如果计算出来的hash地址越大所谓的“冲突”就越少查找起来效率也会提高。减少冲突 其次31只占用5bits,相乘造成数据溢出的概率较小。 再次31可以 由i*31 (i5)-1来表示,现在很多虚拟机里面都有做相关优化。提高算法效率 最后31是一个素数素数作用就是如果我用一个数字来乘以这个素数那么最终出来的结果只能被素数本身和被乘数还有1来整除(减少冲突) 5.2.5 练习 练习1在List内去除重复数字值要求尽量简单 public static List duplicateList(List list) {HashSet set new HashSet();set.addAll(list);return new ArrayList(set); } public static void main(String[] args) {List list new ArrayList();list.add(new Integer(1));list.add(new Integer(2));list.add(new Integer(2));list.add(new Integer(4));list.add(new Integer(4));List list2 duplicateList(list);for (Object integer : list2) {System.out.println(integer);} } 练习2获取随机数 编写一个程序获取10个1至20的随机数要求随机数不能重复。并把最终的随机数输出到控制台。 public class RandomValueTest {public static void main(String[] args) {HashSet hs new HashSet(); // 创建集合对象Random r new Random();while (hs.size() 10) {int num r.nextInt(20) 1; // 生成1到20的随机数hs.add(num);}for (Integer integer : hs) { // 遍历集合System.out.println(integer); // 打印每一个元素}} }练习3去重 使用Scanner从键盘读取一行输入去掉其中重复字符打印出不同的那些字符。比如aaaabbbcccddd public class DistinctTest {public static void main(String[] args) {Scanner sc new Scanner(System.in); // 创建键盘录入对象System.out.println(请输入一行字符串:);String line sc.nextLine(); // 将键盘录入的字符串存储在line中char[] arr line.toCharArray(); // 将字符串转换成字符数组HashSet hs new HashSet(); // 创建HashSet集合对象for (Object c : arr) { // 遍历字符数组hs.add(c); // 将字符数组中的字符添加到集合中}for (Object ch : hs) { // 遍历集合System.out.print(ch);}} }5.3 Set实现类之二LinkedHashSet LinkedHashSet 是 HashSet 的子类不允许集合元素重复。 LinkedHashSet 根据元素的 hashCode 值来决定元素的存储位置但它同时使用双向链表维护元素的次序这使得元素看起来是以添加顺序保存的。 LinkedHashSet插入性能略低于 HashSet但在迭代访问 Set 里的全部元素时有很好的性能。 5.4 Set实现类之三TreeSet 5.4.1 TreeSet概述 TreeSet 是 SortedSet 接口的实现类TreeSet 可以按照添加的元素的指定的属性的大小顺序进行遍历。 TreeSet底层使用红黑树结构存储数据 新增的方法如下 (了解) Comparator comparator() Object first() Object last() Object lower(Object e) Object higher(Object e) SortedSet subSet(fromElement, toElement) SortedSet headSet(toElement) SortedSet tailSet(fromElement) TreeSet特点不允许重复、实现排序自然排序或定制排序 TreeSet 两种排序方法自然排序和定制排序。默认情况下TreeSet 采用自然排序。 自然排序TreeSet 会调用集合元素的 compareTo(Object obj) 方法来比较元素之间的大小关系然后将集合元素按升序(默认情况)排列。 如果试图把一个对象添加到 TreeSet 时则该对象的类必须实现 Comparable 接口。 实现 Comparable 的类必须实现 compareTo(Object obj) 方法两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小。 定制排序如果元素所属的类没有实现Comparable接口或不希望按照升序(默认情况)的方式排列元素或希望按照其它属性大小进行排序则考虑使用定制排序。定制排序通过Comparator接口来实现。需要重写compare(T o1,T o2)方法。 利用int compare(T o1,T o2)方法比较o1和o2的大小如果方法返回正整数则表示o1大于o2如果返回0表示相等返回负整数表示o1小于o2。 要实现定制排序需要将实现Comparator接口的实例作为形参传递给TreeSet的构造器。 因为只有相同类的两个实例才会比较大小所以向 TreeSet 中添加的应该是同一个类的对象。 对于 TreeSet 集合而言它判断两个对象是否相等的唯一标准是两个对象通过 compareTo(Object obj) 或compare(Object o1,Object o2)方法比较返回值。返回值为0则认为两个对象相等。
http://www.w-s-a.com/news/457323/

相关文章:

  • 外汇交易网站开发仟亿家设计软件好吗亿家
  • 专门教做甜品的网站郑州高新区建设环保局网站
  • 建站公司怎么获客网站建设全网营销
  • 黄石做网站的公司html免费网站模板
  • 做个商城网站怎么做便宜优酷视频网站源码
  • 网站侧边栏导航代码泰兴市住房和建设局网站
  • html网站登录界面模板确定建设电子商务网站目的
  • wordpress 多站点迁移三台网站seo
  • 工信部网站备案文件好网站建设公司地址
  • 怎么做app和网站购物网站单页面怎么做的
  • 西宁专业做网站教育网站建设策划书
  • 个人网站域名怎么起网站建设业务好跑吗
  • 网页设计的网网页设计的网站企业网站怎样做优化
  • 论文中小企业的网站建设域名网站空间
  • 宿迁网站建设联系电话现在出入邯郸最新规定
  • 男女做羞羞的事情网站30岁转行做网站编辑
  • 做企业网站的轻量级cmswordpress 越来越慢
  • 无锡中英文网站建设莱芜网络公司
  • ps软件下载官方网站相关搜索优化软件
  • 世界杯网站源码下载做网站推广代理
  • 用股票代码做网站的wordpress通过标签调用文章
  • iis添加网站ip地址树莓派运行wordpress
  • 网站空间域名多少钱宿迁做网站公司
  • 福州建设企业网站网站交互主要做什么的
  • 英文网站建设方法门户网站特点
  • 腾讯云备案 网站名称萧山城市建设网站
  • 漳浦网站建设网络营销推广策略
  • 龙岗商城网站建设教程百度关键词排名突然没了
  • 深圳网站建设服务哪家有织梦网站模板安装
  • 网站设计与网页制作代码大全网站开发还找到工作吗