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

网站建设的开发程序珠海市建设局网站

网站建设的开发程序,珠海市建设局网站,聚名网是干什么的,有一个网站怎么做cpcCollection 和 Map接口及其实现类总结 Collection接口 Collection是最基本的集合接口#xff0c;一个Collection代表一组Object#xff0c;即Collection的元素#xff08;Elements#xff09;。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SD… Collection 和 Map接口及其实现类总结 Collection接口 Collection是最基本的集合接口一个Collection代表一组Object即Collection的元素Elements。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类Java SDK提供的类都是继承自Collection的“子接口”如List和Set。 所有实现Collection接口的类都必须提供两个标准的构造函数无参数的构造函数用于创建一个空的Collection有一个Collection参数的构造函数用于创建一个新的Collection这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。 如何遍历Collection中的每一个元素不论Collection的实际类型如何它都支持一个iterator()的方法该方法返回一个迭代子使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下 Iterator it collection.iterator(); // 获得一个迭代子 while(it.hasNext()) { Object obj it.next(); // 得到下一个元素 } 由Collection接口派生的两个接口仅为List和Set。 Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap List接口 List接口对Collection进行了简单的扩充它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储因此它的随机访问速度极快而LinkedList的内部实现是链表它适合于在链表中间需要频繁进行插入和删除操作。在具体应用时可以根据需要自由选择。前面说的Iterator只能对容器进行向前遍历而ListIterator则继承了Iterator的思想并提供了对List进行双向遍历的方法。 List是有序的Collection使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引元素在List中的位置类似于数组下标来访问List中的元素这类似于Java的数组。 和下面要提到的Set不同List允许有相同的元素。 除了具有Collection接口必备的iterator()方法外List还提供一个listIterator()方法返回一个ListIterator接口和标准的Iterator接口相比ListIterator多了一些add()之类的方法允许添加删除设定元素还能向前或向后遍历。 实现List接口的常用类有LinkedListArrayListVector和Stack。 LinkedList类 LinkedList实现了List接口允许null元素。此外LinkedList提供额外的getremoveinsert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈stack队列queue或双向队列deque。 注意LinkedList没有同步方法。如果多个线程同时访问一个List则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List List list Collections.synchronizedList(new LinkedList(...)); ArrayList类 ArrayList实现了可变大小的数组。它允许所有元素包括null。ArrayList没有同步。 sizeisEmptygetset方法运行时间为常数。但是add方法开销为分摊的常数添加n个元素需要O(n)的时间。其他的方法运行时间为线性。 每个ArrayList实例都有一个容量Capacity即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加但是增长算法并没有定义。当需要插入大量元素时在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。 和LinkedList一样ArrayList也是非同步的unsynchronized。 Vector类 Vector非常类似ArrayList但是Vector是同步的。由Vector创建的Iterator虽然和ArrayList创建的Iterator是同一接口但是因为Vector是同步的当一个Iterator被创建而且正在被使用另一个线程改变了Vector的状态例如添加或删除了一些元素这时调用Iterator的方法时将抛出ConcurrentModificationException因此必须捕获该异常。 Stack类 Stack继承自Vector实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法还有peek方法得到栈顶的元素empty方法测试堆栈是否为空search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。 List接口各实现类的区别 ArrayList 和Vector是采用数组方式存储数据此数组元素数大于实际存储的数据以便增加和插入元素都允许直接序号索引元素但是插入数据要设计到数组元素移动等内存操作所以索引数据快插入数据慢Vector由于使用了synchronized方法线程安全所以性能上比ArrayList要差LinkedList使用双向链表实现存储按序号索引数据需要进行向前或向后遍历但是插入数据时只需要记录本项的前后项即可所以插入数度较快 同步性 Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择这样可以避免由于同步带来的不必要的性能开销。 数据增长 从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度Vector缺省情况下自动增长原来一倍的数组长度ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势因为你可以通过设置集合的初始化大小来避免不必要的资源开销。 使用模式 如果涉及到堆栈队列等操作应该考虑用List对于需要快速插入删除元素应该使用LinkedList如果需要快速随机访问元素应该使用ArrayList。在ArrayList和Vector中从一个指定的位置通过索引查找数据或是在集合的末尾增加、移除一个元素所花费的时间是一样的这个时间我们用O(1)表示。但是如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长O(n-i)其中n代表集合中元素的个数i代表元素增加或移除元素的索引位置。为什么会这样呢以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢 这意味着你只是查找特定位置的元素或只在集合的末端增加、移除元素那么使用Vector或ArrayList都可以。如果是其他操作你最好选择其他的集合操作类。比如LinkList集合类在增加或移除集合中任何位置的元素所花费的时间都是一样的?O(1)但它在索引一个元素的使用缺比较慢O(i),其中i是索引的位置.使用ArrayList也很容易因为你可以简单的使用索引来代替创建iterator对象的操作。LinkList也会为每个插入的元素创建对象所有你要明白它也会带来额外的开销。 最后在《Practical Java》一书中Peter Haggar建议使用一个简单的数组Array来代替Vector或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组(Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作。 尽量返回接口而非实际的类型如返回List而非ArrayList这样如果以后需要将ArrayList换成LinkedList时客户端代码不用改变。这就是针对抽象编程。 Set接口 Set接口也是Collection的一种扩展而与List不同的时在Set中的对象元素不能重复也就是说你不能把同样的东西两次放入同一个Set容器中。它的常用具体实现有HashSet和TreeSet类。HashSet能快速定位一个元素但是你放到HashSet中的对象需要实现hashCode()方法它使用了前面说过的哈希码的算法。而TreeSet则将放入其中的元素按序存放这就要求你放入其中的对象是可排序的这就用到了集合框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的它就应该实现Comparable接口。有时多个类具有相同的排序算法那就不需要在每分别重复定义相同的排序算法只要实现Comparator接口即可。集合框架中还有两个很实用的公用类Collections和Arrays。Collections提供了对一个Collection容器进行诸如排序、复制、查找和填充等一些非常有用的方法Arrays则是对一个数组进行类似的操作。 Set是一种不包含重复的元素的Collection即任意的两个元素e1和e2都有e1.equals(e2)falseSet最多有一个null元素。 很明显Set的构造函数有一个约束条件传入的Collection参数不能包含重复的元素。 请注意必须小心操作可变对象Mutable Object。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)true将导致一些问题。 Map接口 Map是一种把键对象和值对象进行关联的容器而一个值对象又可以是一个Map依次类推这样就可形成一个多级映射。对于键对象来说像Set一样一个Map容器中的键对象不允许重复这是为了保持查找结果的一致性;如果有两个键对象一样那你想得到那个键对象所对应的值对象时就有问题了可能你得到的并不是你想的那个值对象结果会造成混乱所以键的唯一性很重要也是符合集合的性质的。当然在使用过程中某个键所对应的值对象可能会发生变化这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性的要求。你可以将任意多个键都映射到一个值对象上这不会发生任何问题不过对你的使用却可能会造成不便你不知道你得到的到底是那一个键所对应的值对象。Map有两种比较常用的实现HashMap和TreeMap。HashMap也用到了哈希码的算法以便快速查找一个键TreeMap则是对键按序存放因此它便有一些扩展的方法比如firstKey(),lastKey()等你还可以从TreeMap中指定一个范围以取得其子Map。键和值的关联很简单用pub(Object key,Object value)方法即可将一个键与一个值对象相关联。用get(Object key)可得到与此key对象所对应的值对象。 请注意Map没有继承Collection接口Map提供key到value的映射。一个Map中不能包含相同的key每个key只能映射一个value。Map接口提供3种集合的视图Map的内容可以被当作一组key集合一组value集合或者一组key-value映射。 Hashtable类 Hashtable继承Map接口实现一个key-value映射的哈希表。任何非空non-null的对象都可作为key或者value。 添加数据使用put(key, value)取出数据使用get(key)这两个基本操作的时间开销为常数。 Hashtable通过initial capacity和load factor两个参数调整性能。通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大这会影响像get和put这样的操作。 使用Hashtable的简单示例如下将123放到Hashtable中他们的key分别是”one””two””three” Hashtable numbers new Hashtable(); numbers.put(“one”, new Integer(1)); numbers.put(“two”, new Integer(2)); numbers.put(“three”, new Integer(3)); 要取出一个数比如2用相应的key Integer n (Integer)numbers.get(“two”); System.out.println(“two ” n); 由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object如果你用自定义的类当作key的话要相当小心按照散列函数的定义如果两个对象相同即obj1.equals(obj2)true则它们的hashCode必须相同但如果两个对象不同则它们的hashCode不一定不同如果两个不同对象的hashCode相同这种现象称为冲突冲突会导致操作哈希表的时间开销增大所以尽量定义好的hashCode()方法能加快哈希表的操作。 如果相同的对象有不同的hashCode对哈希表的操作会出现意想不到的结果期待的get方法返回null要避免这种问题只需要牢记一条要同时复写equals方法和hashCode方法而不要只写其中一个。 Hashtable是同步的。 HashMap类 HashMap和Hashtable类似不同之处在于HashMap是非同步的并且允许null即null value和null key。但是将HashMap视为Collection时values()方法可返回Collection其迭代子操作时间开销和HashMap的容量成比例。因此如果迭代操作的性能相当重要的话不要将HashMap的初始化容量设得过高或者load factor过低。 WeakHashMap类 WeakHashMap是一种改进的HashMap它对key实行“弱引用”如果一个key不再被外部所引用那么该key可以被GC回收。 Hashtable类和HashMap类的区别 Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的HashMap是Java 1.2引进的Map接口的一个实现。 也许最重要的不同是Hashtable的方法是同步的而HashMap的方法不是。这就意味着虽然你可以不用采取任何特殊的行为就可以在一个多线程的应用程序中用一个Hashtable但你必须同样地为一个HashMap提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法它创建一个线程安全的Map对象并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。这么做的结果就是当你不需要同步时你不能切断Hashtable中的同步比如在一个单线程的应用程序中而且同步增加了很多处理费用。 第三点不同是只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key但任意数量的条目可以是空的value。这就是说如果在表中没有发现搜索键或者如果发现了搜索键但它是一个空的值那么get()将返回null。如果有必要用containKey()方法来区别这两种情况。 一些资料建议当需要同步时用Hashtable反之用HashMap。但是因为在需要时HashMap可以被同步HashMap的功能比Hashtable的功能更多而且它不是基于一个陈旧的类的所以有人认为在各种情况下HashMap都优先于Hashtable。 关于Properties 有时侯你可能想用一个hashtable来映射key的字符串到value的字符串。DOS、Windows和Unix中的环境字符串就有一些例子如key的字符串PATH被映射到value的字符串C:\WINDOWS;C:\WINDOWS\SYSTEM。Hashtables是表示这些的一个简单的方法但Java提供了另外一种方法。 Java.util.Properties类是Hashtable的一个子类设计用于String keys和values。Properties对象的用法同Hashtable的用法相象但是类增加了两个节省时间的方法你应该知道。 Store()方法把一个Properties对象的内容以一种可读的形式保存到一个文件中。Load()方法正好相反用来读取文件并设定Properties对象来包含keys和values。 注意因为Properties扩展了Hashtable你可以用超类的put()方法来添加不是String对象的keys和values。这是不可取的。另外如果你将store()用于一个不包含String对象的Properties对象store()将失败。作为put()和get()的替代你应该用setProperty()和getProperty()它们用String参数。 posted on 2011-07-28 08:58 木子恺 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/zhangkaihong/archive/2011/07/28/2119109.html
http://www.zqtcl.cn/news/957874/

相关文章:

  • 腾讯的网站建设用了多少钱找人合伙做网站平台
  • 企业网站功能模块介绍服务器免费体验
  • 小程序制作收款网站结构优化的优化包括
  • 北京市建设工程质监站网站poi player wordpress
  • php网站开发工程师招聘网自己做小程序要钱吗
  • 两学一做考试网站空间网
  • 齐诺网站建设东莞网站建设做网站集团网站群
  • 网站运营策略如何做软件网站开发培训
  • 数据库型网站wordpress上传工具
  • 太原建站公司模板宁波seo公司哪家好
  • 电商网站都是用什么做的承接电商网站建设
  • c2c网站代表有哪些怎样制作个人网站
  • wordpress linux 建站安丘市建设局官方网站
  • 谁给个好网站硬件开发是什么
  • 海外网站加速器免费长春做网站优化哪家好
  • 建立网站需要多长钱电脑网页设计培训
  • 给网站划分栏目邢台做网站优化费用
  • 网群企业网站管理系统红塔区住房和城乡建设局网站
  • 濮阳网站建设在哪做沈阳百度网站的优点
  • 网站上如何做问卷调查温州建设局官方网站
  • 做一件代发哪个网站好具有品牌的福州网站建设
  • 邢台移动端网站建设犀牛建模教程
  • 华池网站建设广西柳州市
  • 泰安网站建设推荐软件商店电脑版官方下载
  • 站长平台网站报价单模板表格
  • 织梦做的网站老是被黑杭州网站设计询问蓝韵网络
  • wordpress手机版如何设置福鼎整站优化
  • 网站建设小程序定制开发北京东宏建设网站
  • 网站制作还花钱网站图怎么做
  • 免费搭网站wordpress minty