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

优惠券网站开发哪家好中国核工业第五建设有限公司校招

优惠券网站开发哪家好,中国核工业第五建设有限公司校招,前端培训出来工资多少,wordpress 首页幻灯片java中无限大一套 甲Set是元素的集合#xff0c;从而在任何给定的元件Set只出现一次。 更正式地说#xff0c;集合不包含元素e1和e2对#xff0c;因此e1.equals(e2) 。 我们可以像这样在Java 9中轻松创建Set #xff1a; final SetInteger s Set.of(1, 2, 3); … java中无限大 一套 甲Set是元素的集合从而在任何给定的元件Set只出现一次。 更正式地说集合不包含元素e1和e2对因此e1.equals(e2) 。 我们可以像这样在Java 9中轻松创建Set final SetInteger s Set.of(1, 2, 3); System.out.println(s); 这可能会产生以下输出 [2, 3, 1] 上面产生的Set是不可变的即它不能更改并且也是有限的因为Set有不同数量的元素即三个。 未指定通过其读取方法例如stream() iterator()和forEach() 返回元素的顺序。 无限集 无限集包含无限数量的元素。 无限集的一个示例是所有整数的集合[…-1012…]其中整数不是Java Integer类而是根据整数的数学定义得出的整数其中存在对于任何给定的整数n始终为更大的整数n 1。 有许多无限集例如所有质数的集合偶数整数的集合斐波那契数的集合等。 由于明显的原因我们无法预先计算和存储无限Java Set所有元素。 如果尝试最终将耗尽内存。 我们必须问自己的一个基本问题是对于我们拥有的Java类型实际上是否存在无限集 如果我们有一个SetByte中有最多256个元素的Set 这是远离无限的同样的道理也适用于Short 甚至Integer 。 毕竟只有大约40亿个不同的Integer对象如果使用位图表示成员身份则可以在0.5 GB的空间中容纳SetInteger 。 尽管很大但不是无限的。 但是如果我们谈论的是Long或String元素那么至少实际上是在接近无限集。 要存储所有Long的位图将需要许多PB内部存储空间。 真正的无限Set将是具有任意长度的字符[az]的所有可能组合的String Set 。 在继续之前我想提一下这篇文章中的代码也可以在GitHub上找到如文章结尾处所述。 ImmutableStreamSet 为了摆脱存储Set元素的范式我们可以创建一个ImmutableStreamSet 仅通过其stream()方法定义Set的元素。 可以将ImmutableStreamSet定义为如下所示的FunctionalInterface FunctionalInterface public interface ImmutableStreamSetE extends SetE {// This is the only method we need to implementsOverridepublic StreamE stream(); Overridedefault int size() {return (int) stream().limit(Integer.MAX_VALUE).count();}Overridedefault boolean contains(Object o) {return stream().anyMatch(e - Objects.equals(e, o));}Overridedefault boolean containsAll(Collection? c) {return (this c) ? true : c.stream().allMatch(this::contains);}Overridedefault boolean isEmpty() {return !stream().findAny().isPresent();}Overridedefault T T[] toArray(T[] a) {return stream().collect(toList()).toArray(a);}Overridedefault Object[] toArray() {return stream().toArray();}Overridedefault SpliteratorE spliterator() {return stream().spliterator();}Overridedefault IteratorE iterator() {return stream().iterator();}Overridedefault StreamE parallelStream() {return stream().parallel();}Overridedefault void forEach(Consumer? super E action) {stream().forEach(action);}// We are immutableOverridedefault boolean removeIf(Predicate? super E filter) {throw new UnsupportedOperationException();}Overridedefault void clear() {throw new UnsupportedOperationException();}Overridedefault boolean removeAll(Collection? c) {throw new UnsupportedOperationException();}Overridedefault boolean retainAll(Collection? c) {throw new UnsupportedOperationException();}Overridedefault boolean addAll(Collection? extends E c) {throw new UnsupportedOperationException();}Overridedefault boolean remove(Object o) {throw new UnsupportedOperationException();}Overridedefault boolean add(E e) {throw new UnsupportedOperationException();}static E ImmutableStreamSetE of(SupplierStreamE supplier) {// Check out GitHub to see how this Impl class is implementedreturn new ImmutableStreamSetImpl(supplier);}} 太棒了现在我们只需提供像这样的流提供者就可以创建无限集 ImmutableStreamSetLong setOfAllLong LongStream.rangeClosed(Long.MIN_VALUE, Long.MAX_VALUE)::boxed; 这将创建一Set所有Long值例如具有2 ^ 64个元素。 提供流提供程序时必须确保遵守元素唯一性的Set属性。 考虑以下非法集 final ImmutableStreamSetLong illegalSet () - Stream.of(1l, 2l, 1l); 显然集合中发生11次两次这使该对象违反了集合要求。 正如我们将看到的最好创建我们正在考虑的无限集的具体类。 上面的默认实现的一个特殊问题是contains()方法可能非常慢。 阅读下一章找出原因以及如何解决。 正长集 让我们假设我们要创建一个包含所有正长值的Set 并且希望能够与其他Set和Object有效地使用Set 。 我们可以这样去做 public final class PositiveLongSet implements ImmutableStreamSetLong {public static final PositiveLongSet INSTANCE new PositiveLongSet();private PositiveLongSet() {}Overridepublic StreamLong stream() {return LongStream.rangeClosed(1, Long.MAX_VALUE).boxed();}Overridepublic int size() {return Integer.MAX_VALUE;}Overridepublic boolean contains(Object o) {return SetUtil.contains(this, Long.class, other - other 0, o);}Overridepublic boolean isEmpty() {return false;}Overridepublic String toString() {return SetUtil.toString(this);}} 请注意即使Set很大我们如何遵守方法size()的形式要求在该方法中我们返回Integer.MAX_VALUE 。 如果Set已在今天定义则size()可能会返回long而不是int 。 但是在90年代初内部RAM通常小于1 GB。 我们在类中使用了两种实用程序方法 SetUtil.toString()采用Set 对前八个元素进行迭代并返回这些元素的String表示形式。 SetUtil.contains()方法采用Set Element类型类此处为Long.class 和Predicate 如果我们Long.class比较的对象属于给定Element类型类如果我们要比较的对象是null或其他类型则该Set不包含该对象。 这是SetUtil样子 final class SetUtil {private static final int TO_STRING_MAX_ELEMENTS 8;static E String toString(SetE set) {final ListString first set.stream().limit(TO_STRING_MAX_ELEMENTS 1).map(Object::toString).collect(toList());final String endMarker first.size() TO_STRING_MAX_ELEMENTS ? , ...] : ];return first.stream().limit(TO_STRING_MAX_ELEMENTS).collect(joining(, , [, endMarker));}static E boolean contains(final SetE set,final ClassE clazz,final PredicateE predicate,final Object o) {if (o null) {return false;}if (!(clazz.isAssignableFrom(o.getClass()))) {return false;}final E other clazz.cast(o);return predicate.test(other);}} 有了类ImmutableStreamSet和SetUtil我们现在可以轻松地创建其他无限集例如PostitiveEvenLongSet 以下未显示请PrimeLongSet编写 PrimeLongSet 包含可以用Long表示的所有素数甚至FibonacciLongSet 包含所有fibonacci数字可以用Long表示。 这些类如下所示 PrimeLongSet public final class PrimeLongSet implements ImmutableStreamSetLong {public static final PrimeLongSet INSTANCE new PrimeLongSet();private PrimeLongSet() {}private static final LongPredicate IS_PRIME x - LongStream.rangeClosed(2, (long) Math.sqrt(x)).allMatch(n - x % n ! 0);Overridepublic StreamLong stream() {return LongStream.rangeClosed(2, Long.MAX_VALUE).filter(IS_PRIME).boxed();}Overridepublic int size() {return Integer.MAX_VALUE; }Overridepublic boolean contains(Object o) {return SetUtil.contains(this, Long.class, IS_PRIME::test, o);}Overridepublic boolean isEmpty() {return false;}Overridepublic String toString() {return SetUtil.toString(this);}}斐波那契长集 public final class FibonacciLongSet implements ImmutableStreamSetLong {public static final FibonacciLongSet INSTANCE new FibonacciLongSet();private FibonacciLongSet() {}Overridepublic StreamLong stream() {return Stream.concat(Stream.of(0l),Stream.iterate(new Fibonacci(0, 1), Fibonacci::next).mapToLong(Fibonacci::getAsLong).takeWhile(fib - fib 0).boxed());}Overridepublic int size() {return 92;}Overridepublic boolean contains(Object o) {return SetUtil.contains(this,Long.class,other - stream().anyMatch(fib - Objects.equals(fib, other)),o);}Overridepublic boolean isEmpty() {return false;}Overridepublic String toString() {return SetUtil.toString(this);}private static class Fibonacci {final long beforeLast;final long last;public Fibonacci(long beforeLast, long last) {this.beforeLast beforeLast;this.last last;}public Fibonacci next() {return new Fibonacci(last, last beforeLast);}public long getAsLong() {return beforeLast last;}}} 注意当长回绕为负值时我们如何使用Stream::takeWhile中断流。 可以说当我们进行预计算并提供92的大小时我们正在“作弊”但否则size()会慢一些。 缝合全部 通过为这些类的实例提供带有静态提供程序的接口我们可以封装我们的预定义集并确保在JVM中只有这样的一个实例如下所示 public interface Sets {static SetLong positiveLongSet() {return PositiveLongSet.INSTANCE;}static SetLong positiveEvenLongSet() {return PositiveEvenLongSet.INSTANCE;}static SetLong primeLongSet() {return PrimeLongSet.INSTANCE;}static SetLong fibonacciLongSet() {return FibonacciLongSet.INSTANCE;}} 我们还可以将代码封装在Java 9模块中通过将Sets和ImmutableStreamSet类暴露在项目的最顶层包中并将所有其他类放在名为“ internal”的包中不公开以确保仅可见Sets和ImmutableStreamSet类。 。 这是我们如何module-info.java可能看起来像规定两个外露类在com.speedment.infinite_sets在包等并且实现类com.speedment.infinite_sets.internal module-info.java module com.speedment.infinite_sets {exports com.speedment.infinite_sets; }尝试一下 现在我们可以通过首先声明现有模块的用法来创建另一个使用无限集的模块如下所示 module-info.java module Infinite_sets_app {requires com.speedment.infinite_sets; } 然后我们可以访问模块的裸露部分。 这是尝试无限集的一种方法 import static com.speedment.infinite_sets.Sets.*; public class Main {public static void main(String[] args) {Stream.of(Set.of(1, 2, 3),positiveLongSet(),positiveEvenLongSet(),primeLongSet(),fibonacciLongSet()).forEachOrdered(System.out::println);// This actually completes fast due to identity equalitypositiveLongSet().containsAll(positiveLongSet());}} 这可能会产生以下输出 [3, 2, 1] [1, 2, 3, 4, 5, 6, 7, 8, ...] [2, 4, 6, 8, 10, 12, 14, 16, ...] [2, 3, 5, 7, 11, 13, 17, 19, ...] [0, 1, 2, 3, 5, 8, 13, 21, ...]参与GitHub 这篇文章中的源代码可以在GitHub上找到 。 游戏设定和比赛… 翻译自: https://www.javacodegeeks.com/2018/06/infinite-sets-java.htmljava中无限大
http://www.pierceye.com/news/2721/

相关文章:

  • flash网站的优缺点十堰秦楚网手机版下载
  • 成都网站优化软件mod_rewrite wordpress
  • 优惠券网站制作教程开一个建筑公司容易吗
  • 做网站设计需要学什么做个小程序需要多少钱
  • 怎么免费自己做网站广东网站开发软件
  • 网站托管服务合同可信网站验证 费用
  • 企业网站功能报价可以免费打开网站的软件
  • 品牌网站建设哪好用vs2010做网站导航
  • 企业网站系统功能设计说明阿里云做网站麻烦吗
  • 前台网站开发技术哪家网站设计公司好
  • 怎么建立自己的网站上海网站注销吗
  • 免费的网站登录模板下载平台网站建设有哪些
  • 企业网站必须备案网页设计英语
  • 潍坊网站建设 绮畅网站备案提交管局
  • 直播网站开发核心技术网站开发主流程序
  • 企业网查询官网在线登录入口湖北seo推广
  • html网站首页图片切换设计网站首页要几天
  • 网站建设素材网页数据服务网站策划方案
  • 网站需求建设关系书济南网站优化收费标准
  • 网站被惩罚之后怎么做当前主流的网络营销方式
  • 侨联网站建设方案公司的网页制作需要考虑什么
  • 招聘网站推广怎么做品牌网站建设费
  • 网站如何做注册类 cpawordpress zenmeyong
  • 公司做网站注意什么广州建设工程交易中心网站
  • 浙江久天建设有限公司网站如何制作小程序码
  • 教学网站婚庆5个坑
  • 个性定制网站手机微信打开文件是乱码
  • 为什么电子网站开发手机设计画图软件
  • 许昌那有做网站自己个人的网站怎么设计
  • 网站设计的指导思想网站开发诺亚科技