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

腾讯云网站建设的步骤过程为外国企业做中文网站建设

腾讯云网站建设的步骤过程,为外国企业做中文网站建设,微软手机做网站服务器吗,seo具体seo怎么优化第二章 Set系列集合和Set接口 Set集合概述#xff1a;前面学习了Collection集合下的List集合#xff0c;现在继续学习它的另一个分支#xff0c;Set集合。 set系列集合的特点#xff1a; Set接口#xff1a; java.util.Set接口和java.util.List接口一样#xff0c;同样…第二章 Set系列集合和Set接口 Set集合概述前面学习了Collection集合下的List集合现在继续学习它的另一个分支Set集合。 set系列集合的特点 Set接口 java.util.Set接口和java.util.List接口一样同样继承自Collection接口它与Collection接口中的方法基本一致并没有对Collection接口进行功能上的扩充只是比Collection接口更加严格了。与List接口不同的是Set接口都会以某种规则保证存入的元素不出现重复。 Set集合有多个子类这里我们介绍其中的java.util.HashSet、java.util.LinkedHashSet、java.util.TreeSet这两个集合。 tips:Set集合取出元素的方式可以采用迭代器、增强for。 2.1 HashSet集合介绍 java.util.HashSet是Set接口的一个实现类它所存储的元素是不可重复的并且元素都是无序的(即存取顺序不能保证不一致)。java.util.HashSet底层的实现其实是一个java.util.HashMap支持由于我们暂时还未学习先做了解。 HashSet是根据对象的哈希值来确定元素在集合中的存储位置因此具有良好的存储和查找性能。保证元素唯一性的方式依赖于hashCode与equals方法。 我们先来使用一下Set集合存储看下现象再进行原理的讲解: public class HashSetDemo {public static void main(String[] args) {//创建 Set集合HashSetString  set new HashSetString(); ​//添加元素set.add(new String(cba));set.add(abc);set.add(bac); set.add(cba);  //遍历for (String name : set) {System.out.println(name);}} } 输出结果如下说明集合中不能存储重复元素 cba abc bac tips:根据结果我们发现字符串cba只存储了一个也就是说重复的元素set集合不存储。  为了方便理解我们再给出一个例子 我们发现重复的的第二个“111”字符串没有被添加进去说明HashSet的特点就是像上面所说的有去重复的功能或者说不能添加重复的数据。因此打印只打印了一个字符串“111” 再看 添加的顺序是111、333、222但是打印的顺序是111、222、333说明打印顺序和添加顺序没有关系也就是存的顺序和取的顺序不一致。也就是说HashSet是无序的。其实在底层是用HashMap实现的后面会细说。 至于无索引怎么体现呢可以到JDK参考文档里查看HashSet集合里没有获取索引的方法。因此这也是它的一个特点无索引。 HashSet在开发中的使用场景 可以利用HashSet的特性给数据去重 代码示例 //练习需求给ArrayList进行去重 ArrayListString list new ArrayList(); list.add(aaa); list.add(aaa); list.add(bbb); list.add(bbb); list.add(ccc); list.add(ccc); System.out.println(list); ​ ​ //可以利用HashSet的特性给数据去重 HashSetString hs new HashSet(); //把list集合中所有的元素全部添加到hs当中 hs.addAll(list); ​ //无序 System.out.println(hs); 运行结果 2.2 HashSet集合存储数据的结构哈希表 什么是哈希表呢在了解哈希表之前先得知道哈希值 JDK1.7的哈希值 关于更多哈希值的知识点请查看课件PPT的内容。 在JDK1.8之前哈希表底层采用数组链表实现即使用数组处理冲突同一hash值的链表都存储在一个数组里。但是当位于一个桶中的元素较多即hash值相等的元素较多时通过key值依次查找的效率较低。而JDK1.8中哈希表存储采用数组链表红黑树实现当链表长度超过阈值8时且数组长度大于等于64时将链表转换为红黑树这样大大减少了查找时间。 简单的来说哈希表是由数组链表红黑树JDK1.8增加了红黑树部分实现的如下图所示。 看到这张图就有人要问了这个是怎么存储的呢 为了方便大家的理解我们结合一个存储流程图来说明一下 总而言之JDK1.8引入红黑树大程度优化了HashMap的性能那么对于我们来讲保证HashSet集合元素的唯一其实就是根据对象的hashCode和equals方法来决定的。如果我们往集合中存放自定义的对象那么保证其唯一就必须重写hashCode和equals方法建立属于当前对象的比较方式。 哈希表详细流程 2.3 HashSet存储自定义类型元素 给HashSet中存放自定义类型元素时比如学生类型需要重写对象中的hashCode和equals方法建立自己的比较方式才能保证HashSet集合中的对象唯一. 创建自定义Student类: public class Student {private String name;private int age; ​ ​public Student() {} ​public Student(String name, int age) {this.name name;this.age age;} ​/*** 获取* return name*/public String getName() {return name;} ​/*** 设置* param name*/public void setName(String name) {this.name name;} ​/*** 获取* return age*/public int getAge() {return age;} ​ ​ ​/*** 设置* param age*/public void setAge(int age) {this.age age;} ​ ​Overridepublic boolean equals(Object o) {if (this o) return true;if (o null || getClass() ! o.getClass()) return false;Student student (Student) o;return age student.age Objects.equals(name, student.name);} ​Overridepublic int hashCode() {return Objects.hash(name, age);} ​public String toString() {return Student{name name , age age };} } ​ 创建测试类: public class HashSetDemo1 {public static void main(String[] args) {//创建集合HashSetStudent hs new HashSet(); ​//如果在Student类中没有重写hashCode和equals方法//都是操作的都是地址值。//如果我们认为属性相同就是同一个对象那么就需要重写hashCode和equals方法//添加元素hs.add(new Student(zhangsan,23));hs.add(new Student(zhangsan,23));hs.add(new Student(zhangsan,23)); ​System.out.println(hs);} } 这段代码可能理解不透彻我细说一下现在就是创建一个学生类Student类学生属性有姓名跟年龄我们用快捷键生成标准javabean类后如下 注意啊现在没有重写equals方法和hashCode方法我们在测试类写入如下代码并运行 发现重复的元素也添加进去了这是为什么不是说HashSet不是有不重复的特点吗为啥上面那个String就不能添加重复的元素而自定义的Student类不能。这就是我们要讨论的问题。当添加的元素是自己自定义的类型后就需要重写equals方法和hashCode方法。快捷键altinsert 原来这个快捷键每一项都是有用的现在学了很多了。重写后我们再运行上面那个代码 发现现在不能添加重复的元素了。总结再用HashSet集合添加自定义元素除了java提供的都叫自定义元素时都要重写equals和hashCode方法才能保证它的不重复性。前面那个String之所以不能添加重复元素是因为在String类已经重写equals和hashCode方法了。其他包装类也是如此。 2.4 LinkedHashSet 我们知道HashSet保证元素唯一可是元素存放进去是没有顺序的那么我们要保证有序怎么办呢 在HashSet下面有一个子类java.util.LinkedHashSet它是链表和哈希表组合的一个数据存储结构。它能使得元素存放时是有序的。但是在以后的开发中LinkedHashSet用的不多因为它的底层多了一个双向链表效率有点低。以后用hashSet的比较多。 先看一个代码 发现添加元素的顺序和打印的顺序是一致的。相比hashSetLinkHashSet就多了一个有序性。 演示代码如下: public class LinkedHashSetDemo {public static void main(String[] args) {SetString set new LinkedHashSetString();set.add(bbb);set.add(aaa);set.add(abc);set.add(bbc);IteratorString it set.iterator();while (it.hasNext()) {System.out.println(it.next());}} } 结果bbbaaaabcbbc 2.5 TreeSet集合 1. 特点 TreeSet集合是Set接口的一个实现类,底层依赖于TreeMap,是一种基于红黑树的实现,其特点为 元素唯一不能添加重复的元素 元素没有索引 使用元素的自然顺序对元素进行排序或者根据创建 TreeSet 时提供的 Comparator比较器 进行排序具体取决于使用的构造方法 先看一个案例 发现Integer打印的是默认升序排序且不能添加重复的元素。 2.排序方式一默认方式 默认的排序方式也叫做自然排序。 是让Javabean类实现Comparable接口重写里面的compareTo方法来实现的。 注意点 1.Java已经写好的StringInteger已经定义好了默认规则。 String按照首字母的字典顺序排序如果首字母一样则比较第二个字母。 Integer升序 2.我们自己定义了Javabean类需要指定默认排序规则否则会报错。 代码示例1存自定义对象 package com.itheima.a04treesetdemo; ​ public class Student implements ComparableStudent {private String name;private int age; ​//...空参...//...有参...//...get和set方法...//...toString方法... ​Overridepublic int compareTo(Student o) {//按照年龄进行排序//this表示当前要添加的元素//o已经在树里面存在的元素//如果结果是负数那么就存左边降序//如果结果是正数那么就存右边升序//如果结果是0认为现在要添加的元素跟当前元素一直就不存 ​//System.out.println(this: this);//System.out.println(o: o);return this.age - o.age;} } 代码示例2存Integer 案例演示自然排序(20,18,23,22,17,24,19): public static void main(String[] args) {//无参构造,默认使用元素的自然顺序进行排序TreeSetInteger set new TreeSetInteger();set.add(20);set.add(18);set.add(23);set.add(22);set.add(17);set.add(24);set.add(19);System.out.println(set); } ​ 控制台的输出结果为: [17, 18, 19, 20, 22, 23, 24] 3.排序方式二比较器排序 创建集合对象时传递Comparator实现类的对象并重写compare方法。 并在使用的时候默认用第一种当第一种不能满足要求的时候可以用第二种排序方式。 比如Integer默认升序如果我想降序排列就需要用第二种了。 比如String默认按照字典的顺序排列如果我想按照字符串的长度排列就需要用第二种了。 案例 演示比较器排序(20,18,23,22,17,24,19): public static void main(String[] args) {//有参构造,传入比较器,使用比较器对元素进行排序TreeSetInteger set new TreeSetInteger(new ComparatorInteger() {Overridepublic int compare(Integer o1, Integer o2) {//元素前 - 元素后 : 升序//元素后 - 元素前 : 降序C语言库的快速排序算法就是这个原理return o2 - o1;}});set.add(20);set.add(18);set.add(23);set.add(22);set.add(17);set.add(24);set.add(19);System.out.println(set); } ​ 控制台的输出结果为: [24, 23, 22, 20, 19, 18, 17] 2.6练习-存储学生信息按照总分排序 需求 需求键盘录入3个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台 隐藏的排序规则总分一致还得按照语文数学英语姓名这样的顺序排序。 分析 ①定义学生类 ②创建TreeSet集合对象通过进行排序 ③创建学生对象 ④把学生对象添加到集合 ⑤遍历集合 注意 在指定顺序的时候默认按照自然排序方式当自然排序不能满足我们的要求时就用比较器排序。 代码示例 public class Student implements ComparableStudent{private String name;private double chinese;private double math;private double english;...空参构造......带参构造......get和set方法......toString方法...     ​Overridepublic int compareTo(Student o) {//this odouble sum1 this.chinese this.math this.english;double sum2 o.chinese o.math o.english;double sum sum1 - sum2; ​//总分一样看语文double result sum 0 ? this.chinese - o.chinese : sum;//语文一样看数学result result 0 ? this.math - o.math : result;//学生一样看英语result result 0 ? this.english - o.english : result;//英语一样看姓名result result 0 ? this.name.compareTo(o.name) : result;return (int)result;} } ​ ​ ​ public class TreeSetTest1 {public static void main(String[] args) {//1.创建集合TreeSetStudent ts new TreeSet(); ​//2.//只要使用TreeSet就一定要指定排序规则。//首先默认按照自然排序Scanner sc new Scanner(System.in);for (int i 0; i 3; i) {System.out.println(请输入学生的姓名);String name sc.next();System.out.println(请输入语文成绩);double chinese sc.nextDouble();System.out.println(请输入数学成绩);double math sc.nextDouble();System.out.println(请输入英语成绩);double english sc.nextDouble(); ​Student s new Student(name,chinese,math,english);ts.add(s);}//打印System.out.println(ts);} } 这个代码含金量很高一定要掌握自己手动写出来TreeSet的内容差不多就这些了掌握到这里就已经不错了 单列集合总结 以后单列集合用的最多的是ArrayList、HashSet、TreeSet。前面两种用的最为频繁。默认用ArrayList要去重的话用HashSet如果需要排序用TreeSet这是今后开发用的实战用到的哦。 LinkedHashSet和LinkedList基本用不到。 可变参数什么是可变参数为什么要引入可变参数如下 如果我们按照之前的做法就是重写多个方法这样会非常麻烦因为你也不知道数据有几个或者有的人直接创建数组然后传入数组长度这样也可以但是还是有点小丢丢麻烦。可变参数就是可以传入任意个数的参数。 如 测试类可以传任意个数的数据这就是可变参数它的本质就是用数组实现的。 注意当形参有多个时可变参数只能写在最后面的位置!!放在前面的话后面的形参会传递不到值。
http://www.w-s-a.com/news/468309/

相关文章:

  • 大连 网站建设 有限公司十大erp系统
  • 网站后台建设软件网络营销公司招聘
  • 做网站销售电销好做吗网站开发毕业设计代做
  • 成都学网站建设费用帝国cms与wordpress
  • 如何刷网站排名品牌设计的英文
  • 富阳有没有做网站的房产局官网查询系统
  • 建设网站列表aliyun oss wordpress
  • 做PPT的辅助网站wordpress拖拽式主题
  • 商城网站源码seo兼职58
  • 汽车租赁网站的设计与实现全网营销推广哪家正规
  • 做网站时怎么取消鼠标悬停如何设计软件界面
  • 建德网站设计公司中国十大热门网站排名
  • 网站与新媒体建设测评方案163企业邮箱官网入口
  • 怎样做下载网站页面设计参评
  • 哈尔滨住建局网站首页设计制作过程
  • php投资理财企业网站模板网站呼叫中心 建设工期
  • 查数据的权威网站silverlight 做的网站
  • 网站开发外包网站贵阳网站建设 网站制作
  • 官方微网站西安景观设计公司排行
  • 广州学做网站视频代做网站
  • 沈阳公司建站seo课程培训班
  • 杭州做微信网站软件公司网站建设毕业设计中期进度报告
  • 怎么做谷歌这样的网站如何建立一个网站放视频
  • 园区网站建设调研报告北京朝阳区哪里有网站开发
  • 网站角色权限wordpress 优化版
  • 购物网站ppt怎么做网络公司注册多少钱
  • 学做衣服上什么网站好贴吧高级搜索
  • 贵州 跨境电商网站建设做淘宝店铺有哪些好的网站
  • 广州正规网站制作公司网站搭建公司
  • ui设计零基础好学吗珠海网站建设优化推广