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

网站做多长时间才会逐渐成功网站收录下降

网站做多长时间才会逐渐成功,网站收录下降,莆田网站建设建站系统,网站建设与管理的总结报告转自#xff1a;https://www.cnblogs.com/LipeiNet/p/5888513.html 前言#xff1a;在java开发中我们肯定会大量的使用集合#xff0c;在这里我将总结常见的集合类#xff0c;每个集合类的优点和缺点#xff0c;以便我们能更好的使用集合。下面我用一幅图来表示 其中淡绿色…转自https://www.cnblogs.com/LipeiNet/p/5888513.html 前言在java开发中我们肯定会大量的使用集合在这里我将总结常见的集合类每个集合类的优点和缺点以便我们能更好的使用集合。下面我用一幅图来表示 其中淡绿色的表示接口红色的表示我们经常使用的类。 1基本概念 Java容器类类库的用途是保存对象可以将其分为2个概念。 1.1Collection 一个独立元素的序列这些元素都服从一条或多条规则。其中List必须按照插入的顺序保存元素、Set不能有重复的元素、Queue按照排队规则来确定对象的产生顺序通常也是和插入顺序相同 1.2Map 一组成对的值键对对象允许用键来查找值。ArrayList允许我们用数字来查找值它是将数字和对象联系在一起。而Map允许我们使用一个对象来查找某个对象它也被称为关联数组。或者叫做字典。 2List List承诺可以将元素维护在特定的序列中。List接口在Collection的基础上加入了大量的方法使得可以在List中间可以插入和移除元素。下面主要介绍2种List 2.1基本的ArrayList 它的优点在于随机访问元素快但是在中间插入和移除比较慢 那么现在我们就一起来看看为什么ArrayList随机访问快而插入移除比较慢。先说关于ArrayList的初始化。 ArrayList有三种方式进行初始化如下 private transient Object[] elementData; public ArrayList() {this(10);}public ArrayList(int initialCapacity) {super();if (initialCapacity 0)throw new IllegalArgumentException(Illegal Capacity: initialCapacity);this.elementData new Object[initialCapacity];}public ArrayList(Collection? extends E c) {elementData c.toArray();size elementData.length;// c.toArray might (incorrectly) not return Object[] (see 6260652)if (elementData.getClass() ! Object[].class)elementData Arrays.copyOf(elementData, size, Object[].class);} 我们可以看出ArrayList其实就是采用的是数组默认是长度为10的数组。所有ArrayList在读取的时候是具有和数组一样的效率它的时间复杂度为1。 插入尾部就是elementData[size] e;当然中间会进行扩容。现在主要说插入中间为什么相对来说比较慢源码如下 public void add(int index, E element) {rangeCheckForAdd(index);//验证可以不考虑ensureCapacityInternal(size 1); // Increments modCount!!超过当前数组长度进行扩容System.arraycopy(elementData, index, elementData, index 1,size - index);(核心代码)elementData[index] element;size;} System.arraycopy(elementData, index, elementData, index 1)第一个参数是源数组源数组起始位置目标数组目标数组起始位置复制数组元素数目。那么这个意思就是从index索性处每个元素向后移动一位最后把索引为index空出来并将element赋值给它。这样一来我们并不知道要插入哪个位置所以会进行匹配那么它的时间赋值度就为n。 2.2LinkedList 它是通过代价较低在List中间进行插入和移除提供了优化的顺序访问但是在随机访问方面相对较慢。但是他的特性功能要比ArrayList强大的多。支持Queue和Stack ListedList采用的是链式存储。链式存储就会定一个节点Node。包括三部分前驱节点、后继节点以及data值。所以存储存储的时候他的物理地址不一定是连续的。 我们看下它的中间插入实现 从代码我们可以看出先获取插入索引元素的前驱节点然后把这个元素作为后继节点然后在创建新的节点而新的节点前驱节点和获取前驱节点相同而后继节点则等于要移动的这个元素。所以这里是不需要循环的从而在插入和删除的时候效率比较高。 我们在来看看查询我们可以分析出它的效率要比ArrayList低了不少 3Set Set也是一个集合但是他的特点是不可以有重复的对象所以Set最常用的就是测试归属性很容易的询问出某个对象是否存在Set中。并且Set是具有和Collection完全一样的接口没有额外的功能只是表现的行为不同。 3.1HashSet HashSet查询速度比较快但是存储的元素是随机的并没有排序下面我写一段程序看一下 public static void main(String[] args){/*** 没有顺序可循这是因为hashset采用的是散列处于速度考虑*/Random randomnew Random(47);SetInteger intsetnew HashSetInteger();for (int i0;i10000;i){intset.add(random.nextInt(30));}System.out.print(intset);} 3.2TreeSet TreeSet是将元素存储红-黑树结构中所以存储的结果是有顺序的所以如果你想要自己存储的集合有顺序那么选择TreeSet public static void main(String[] args){Random randomnew Random(47);SetInteger intsetnew TreeSetInteger();for (int i0;i10000;i){intset.add(random.nextInt(30));}System.out.print(intset);}  关于LinkedHashSet后面再说。 4Queue Queue是队列队列是典型的先进先出的容器就是从容器的一端放入元素从另一端取出并且元素放入容器的顺序和取出的顺序是相同的。LinkedList提供了对Queue的实现LinkedList向上转型为Queue。其中Queue有offer、peek、element、pool、remove等方法 offer是将元素插入队尾返回false表示添加失败。peek和element都将在不移除的情况下返回对头但是peek在对头为null的时候返回null而element会抛出NoSuchElementException异常。poll和remove方法将移除并返回对头但是poll在队列为null而remove会抛出NoSuchElementException异常以下是例子 public static void main(String[] args){QueueInteger queuenew LinkedListInteger();Random randnew Random();for (int i0;i10;i){queue.offer(rand.nextInt(i10));}printQ(queue);QueueCharacter qcnew LinkedListCharacter();for (char c:HelloWorld.toCharArray()){qc.offer(c);}System.out.println(qc.peek());printQ(qc);ListString mystringsnew LinkedListString();mystrings.add(1);mystrings.get(0);SetString anew HashSetString();SetString setnew HashSetString();set.add(1);}public static void printQ(Queue queue){while (queue.peek 从上面的输出的结果我们可以看出结果并不是一个顺序的没有规则的这个时候如果想让队列按照规则输出那么这个时候我们就要考虑优先级了这个时候我们就应该使用PriorityQueue这个时候如果在调用offer方法插入一个对象的时候这个对象就会按照优先级在对列中进行排序默认的情况是自然排序当然我们可以通过Comparator来修改这个顺序在下一篇讲解。PriorityQueue可以确保当你调用peek、pool、remove方法时获取的元素将是对列中优先级最高的元素。ok我们再次通过代码查看 public static void main(String[] args) {PriorityQueueInteger priorityQueue new PriorityQueueInteger();Random rand new Random();for (int i 0; i 10; i) {priorityQueue.offer(rand.nextInt(i 10));}QueueDemo.printQ(priorityQueue);ListIntegerints Arrays.asList(25,22,20,18,14,9,3,1,1,2,3,9,14,18,21,23,25);priorityQueuenew PriorityQueueInteger(ints);QueueDemo.printQ(priorityQueue);} 从输出可以看到重复是允许的最小值拥有最高优先级如果是String空格也可以算作值并且比字母具有更高的优先级如果你想消除重复可以采用Set进行存储然后把Set作为priorityQueue对象的初始值即可。 5Map Map在实际开发中使用非常广特别是HashMap想象一下我们要保存一个对象中某些元素的值如果我们在创建一个对象显得有点麻烦这个时候我们就可以用上map了HashMap采用是散列函数所以查询的效率是比较高的如果我们需要一个有序的我们就可以考虑使用TreeMap。这里主要介绍一下HashMap的方法大家注意HashMap的键可以是null而且键值不可以重复如果重复了以后就会对第一个进行键值进行覆盖。 put进行添加值键对containsKey验证主要是否存在、containsValue验证值是否存在、keySet获取所有的键集合、values获取所有值集合、entrySet获取键值对。 public static void main(String[] args){//MapString,String petsnew HashMapString, String();MapString,String petsnew TreeMapString, String();pets.put(1,张三);pets.put(2,李四);pets.put(3,王五);if (pets.containsKey(1)){System.out.println(已存在键1);}if (pets.containsValue(张三)){System.out.println(已存在值张三);}SetString setspets.keySet();SetMap.EntryString , String entrySet pets.entrySet();CollectionString values pets.values();for (String value:values){System.out.println(value;);}for (String key:sets){System.out.print(key;);}for (Map.Entry entry:entrySet){System.out.println(键entry.getKey());System.out.println(值entry.getValue());}} 6Iterator和Foreach 现在foreach语法主要作用于数组但是他也可以应用于所有的Collection对象。Collection之所以能够使用foreach是由于继承了Iterator这个接口。下面我写段代码供大家查看 public class IteratorClass {public IteratorString iterator(){return new Itr();}private class Itr implements IteratorString{protected String[] words(Hello Java).split( );private int index0;public boolean hasNext() {return indexwords.length;}public String next() {return words[index];}public void remove() {}} } Iterator iteratorsnew IteratorClass().iterator();for (Iterator ititerator;iterators.hasNext();) {System.out.println(iterators.next());}while (iterators.hasNext()){System.out.println(iterators.next());} 从中我们可以看出foreach循环最终是转换成 for (Iterator ititerator;iterators.hasNext();)只不过jdk帮我们隐藏我们无法查看。下面我们在来分析一个问题关于List删除问题。我们大多肯定使用过for循环或者foreach循环去删除但是结果很明显会出现错误那么现在我们一起分析为啥会出现错误。 1使用for循环删除出现错误分析 2foreach循环删除错误分析 从上面我们得知foreach最终是会转成Iterator的所以它首先会通过next来获取元素我们看代码  请看for循环删除那段代码没删除一次modCount会所以第二次在次删除的时候modCount由于增加和expectedModCount不等所以无法获取元素也就无法删除。 3正确的删除方式 采用迭代器代码如下 IteratorString iteratoruserList.iterator();while (iterator.hasNext()){iterator.next();iterator.remove();} 请记住一定要加上iterator.next();这是因为在源码中有一个lastRed通过它来记录是否是最后一个元素如果不加上iterator.next()那么lastRed-1,在删除验证的时候有这么一段代码if (lastRet 0)throw new IllegalStateException();所以就会抛出异常。   7Collections和Arrays 这里只介绍2个常用的Collections.addAll和Arrays.asList addAll asList采用的是数组 可以看出最终转换成ArrayList。  8总结 1数组是将数字和对象联系起来它保存明确的对象查询对象时候不需要对查询结果进行转换它可以是多维的可以保存基本类型的数据但是数组一旦生成其容量不能改变。所以数组是不可以直接删除和添加元素。 2Collection保存单一的元素而Map保存相关联的值键对有了Java泛型可以指定容器存放对象类型不会将错误类型的对象放在容器中取元素时候也不需要转型。而且Collection和Map都可以自动调整其尺寸。容器不可以持有基本类型。 3像数组一样List也建立数字索性和对象的关联因此数组和List都是排好序的容器List可以自动扩容 4如果需要大量的随机访问就要使用ArrayList如果要经常从中间插入和删除就要使用LinkedList。 5各种Queue和Stack由LinkedList支持 6Map是一种将对象而非数字与对象相关联的设计。HashMap用于快速访问TreeMap保持键始终处于排序状态所以不如HashMap快而LinkedHashMap保持元素插入的顺序但是也通过散列提供了快速访问的能力 7Set不接受重复的元素HashSet提供最快的访问能力TreeSet保持元素排序状态LinkedHashSet以插入顺序保存元素。转载于:https://www.cnblogs.com/jkzr/p/10729124.html
http://www.zqtcl.cn/news/221001/

相关文章:

  • 深圳网站建设领先天津建设企业网站
  • 网站建设犭金手指C排名15温州 建网站的公司
  • 邢台建设银行官方网站公众号开发者密码是什么意思
  • 网站录入信息 前台查询功能怎么做营销网站主题有哪些内容
  • 网站SEO的评价触屏音乐网站源码
  • 网站开发u盘128够吗网站建设是固定资产嘛
  • 网站域名备案信息wordpress搜索文章内容
  • 出口退税在哪个网站做怎么在一起做网站上拿货
  • 网站友链查询传到网站根目录
  • 网站服务器端口设置北京专业网络直播制作
  • 可以免费做演播的听书网站南京企业自助建站
  • 软件下载类型网站怎么做长沙官网优化技术
  • 药品网站订单源码外贸网站建设服务器
  • 深圳网站制作07551免费开发网站
  • 如何直接用jsp做网站不写servletwordpress模板 单栏
  • 长沙网站建设哪个公司好设计公司网站 唐山
  • 原创小说手机网站制作需要多少钱郴州seo外包
  • 深圳市大鹏建设局网站网站关键词没排名怎么办
  • 水果商城网站制作多少钱c#如何做公司网站
  • 国内做进口的电商网站网站建设的经验做法
  • 蚂蚁搬家公司官方网站免费网站软件制作
  • 搭建网站要用到的工具外链代发免费
  • 肥城网站建设流程oem中国代加工网
  • 到底建手机网站还是电脑网站网站视频怎么做
  • 小区网站建设前端手机网站
  • 做一个网站价格WordPress好看的404
  • 查看注册过的网站在线网站软件免费下载
  • 门户网站建设公司价位域名出售网站
  • 亿级流量网站架构自己制作一个网站
  • 企业网站seo成功案例天津网站建设制作品牌公司