public Circle(int elementSize, int queueCapacity) {
        if (elementSize < 0 || queueCapacity < 0) {
            throw new IllegalArgumentException("invalid number");
        }
        if (elementSize < queueCapacity) {
            throw new IllegalArgumentException("invalid elementLength < queueCapacity");
        }
        this.elementSize = elementSize;
        this.queueCapacity = queueCapacity;
        if (this.elementSize % this.queueCapacity == 0) {
            this.circleSize = this.elementSize / this.queueCapacity;
        }
        else {
            this.circleSize = this.elementSize / this.queueCapacity + 1;
        }

        this.data = new ArrayList<ArrayBlockingQueue<E>>(getCircleSize());
        for (int i = 0; i < getCircleSize(); i++) {
            this.data.add(new ArrayBlockingQueue<E>(getQueueCapacity()));
        }
    }