java使用集合存储数字_你可以拥有集合而不用Java存储值吗?

我有一个关于

Java集合的问题,例如Set或List.更常见的是可以在for-each循环中使用的对象.是否有任何要求它们的元素实际上必须存储在数据结构中的某个位置,或者它们是否只能根据某种要求进行描述并在需要时动态计算?感觉这应该可以完成,但我没有看到任何java标准集合类做这样的事情.我在这里违反任何合同吗?

我正在考虑使用它们的主要是数学.比如说我希望有一个代表所有素数低于1 000 000的集合.将它们保存在内存中可能不是一个好主意,而是要检查一个特定数字是否在集合中.

我也不是java流的专家,但我觉得这些应该可以在java 8流中使用,因为对象具有非常小的状态(在你尝试迭代它们之前,集合中的对象甚至不存在或检查集合中是否存在特定对象).

是否有可能使集合或迭代器具有几乎无限多的元素,例如“表格6 * k 1上的所有数字”,“10以上的所有素数”或“此基础跨越的所有向量”?我正在考虑的另一件事是结合两个集合,例如低于1 000 000的所有素数的并集,以及形式2 ^ n-1的所有整数,并列出低于1 000 000的mersenne素数.我觉得它会更容易关于某些数学对象的理由,如果它是以这种方式完成的,并且在实际需要之前不会明确地创建元素.也许我错了.

这是我写的两个模拟类,试图说明我想做什么.它们的行为并不像我期望的那样(参见输出),这让我觉得我在这里与可迭代接口打破某种契约或者执行错误.如果您看到它或者在集合框架下甚至允许这种代码,请随意指出我在这里做错了什么.

import java.util.AbstractSet;

import java.util.Iterator;

public class PrimesBelow extends AbstractSet{

int max;

int size;

public PrimesBelow(int max) {

this.max = max;

}

@Override

public Iterator iterator() {

return new SetIterator(this);

}

@Override

public int size() {

if(this.size == -1){

System.out.println("Calculating size");

size = calculateSize();

}else{

System.out.println("Accessing calculated size");

}

return size;

}

private int calculateSize() {

int c = 0;

for(Integer p: this)

c++;

return c;

}

public static void main(String[] args){

PrimesBelow primesBelow10 = new PrimesBelow(10);

for(int i: primesBelow10)

System.out.println(i);

System.out.println(primesBelow10);

}

}

.

import java.util.Iterator;

import java.util.NoSuchElementException;

public class SetIterator implements Iterator {

int max;

int current;

public SetIterator(PrimesBelow pb) {

this.max= pb.max;

current = 1;

}

@Override

public boolean hasNext() {

if(current < max) return true;

else return false;

}

@Override

public Integer next() {

while(hasNext()){

current++;

if(isPrime(current)){

System.out.println("returning "+current);

return current;

}

}

throw new NoSuchElementException();

}

private boolean isPrime(int a) {

if(a<2) return false;

for(int i = 2; i < a; i++) if((a%i)==0) return false;

return true;

}

}

Main function gives the output

returning 2

2

returning 3

3

returning 5

5

returning 7

7

Exception in thread "main" java.util.NoSuchElementException

at SetIterator.next(SetIterator.java:27)

at SetIterator.next(SetIterator.java:1)

at PrimesBelow.main(PrimesBelow.java:38)

编辑:在next()方法中发现错误.更正了它并将输出更改为新的输出.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值