1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.commons.collections.primitives; 18 19 /** 20 * An ordered collection of <code>byte</code> values. 21 * 22 * @see org.apache.commons.collections.primitives.adapters.BooleanListList 23 * @see org.apache.commons.collections.primitives.adapters.BooleanByteList 24 * 25 * @since Commons Primitives 1.1 26 * @version $Revision: 480460 $ $Date: 2006-11-29 03:14:21 -0500 (Wed, 29 Nov 2006) $ 27 */ 28 public interface BooleanList extends BooleanCollection { 29 /** 30 * Appends the specified element to the end of me (optional operation). 31 * Returns <code>true</code> iff I changed as a result of this call. 32 * <p/> 33 * If a collection refuses to add the specified element for any reason 34 * other than that it already contains the element, it <i>must</i> 35 * throw an exception (rather than simply returning <tt>false</tt>). 36 * This preserves the invariant that a collection always contains the 37 * specified element after this call returns. 38 * 39 * @param element the value whose presence within me is to be ensured 40 * @return <code>true</code> iff I changed as a result of this call 41 * 42 * @throws UnsupportedOperationException when this operation is not 43 * supported 44 * @throws IllegalArgumentException may be thrown if some aspect of the 45 * specified element prevents it from being added to me 46 */ 47 boolean add(boolean element); 48 49 /** 50 * Inserts the specified element at the specified position (optional 51 * operation). Shifts the element currently at that position (if any) 52 * and any subsequent elements to the right, increasing their indices. 53 * 54 * @param index the index at which to insert the element 55 * @param element the value to insert 56 * 57 * @throws UnsupportedOperationException when this operation is not 58 * supported 59 * @throws IllegalArgumentException if some aspect of the specified element 60 * prevents it from being added to me 61 * @throws IndexOutOfBoundsException if the specified index is out of range 62 */ 63 void add(int index, boolean element); 64 65 /** 66 * Inserts all of the elements in the specified collection into me, 67 * at the specified position (optional operation). Shifts the 68 * element currently at that position (if any) and any subsequent 69 * elements to the right, increasing their indices. The new elements 70 * will appear in the order that they are returned by the given 71 * collection's {@link BooleanCollection#iterator iterator}. 72 * 73 * @param index the index at which to insert the first element from 74 * the specified collection 75 * @param collection the {@link BooleanCollection ByteCollection} of 76 * elements to add 77 * @return <code>true</code> iff I changed as a result of this call 78 * 79 * @throws UnsupportedOperationException when this operation is not 80 * supported 81 * @throws IndexOutOfBoundsException if the specified index is out of range 82 */ 83 boolean addAll(int index, BooleanCollection collection); 84 85 /** 86 * Returns <code>true</code> iff <i>that</i> is an <code>BooleanList</code> 87 * that contains the same elements in the same order as me. 88 * In other words, returns <code>true</code> iff <i>that</i> is 89 * a <code>BooleanList</code> that has the same {@link #size() size} as me, 90 * and for which the elements returned by its 91 * {@link BooleanList#iterator iterator} are equal (<code>==</code>) to 92 * the corresponding elements within me. 93 * (This contract ensures that this method works properly across 94 * different implementations of the <code>BooleanList</code> interface.) 95 * 96 * @param that the object to compare to me 97 * @return <code>true</code> iff <i>that</i> is an <code>BooleanList</code> 98 * that contains the same elements in the same order as me 99 */ 100 boolean equals(Object that); 101 102 /** 103 * Returns the value of the element at the specified position 104 * within me. 105 * 106 * @param index the index of the element to return 107 * @return the value of the element at the specified position 108 * @throws IndexOutOfBoundsException if the specified index is out of range 109 */ 110 boolean get(int index); 111 112 /** 113 * @todo figure something out for this 114 * Returns my hash code. 115 * <p /> 116 * The hash code of an <code>BooleanList</code> is defined to be the 117 * result of the following calculation: 118 * <pre> int hash = 1; 119 * for(BooleanIterator iter = iterator(); iter.hasNext(); ) { 120 * boolean value = iter.next(); 121 * hash = 31*hash + (int)(value ^ (value >>> 32)); 122 * }</pre> 123 * <p /> 124 * This contract ensures that this method is consistent with 125 * {@link #equals equals} and with the 126 * {@link java.util.List#hashCode hashCode} 127 * method of a {@link java.util.List List} of {@link Boolean}s. 128 * 129 * @return my hash code 130 */ 131 int hashCode(); 132 133 /** 134 * Returns the index of the first occurrence of the specified element 135 * within me, or <code>-1</code> if I do not contain the element. 136 * 137 * @param element the element to search for 138 * @return the smallest index of an element matching the specified value, 139 * or <code>-1</code> if no such matching element can be found 140 */ 141 int indexOf(boolean element); 142 143 /** 144 * Returns an {@link BooleanIterator iterator} over all my elements, 145 * in the appropriate sequence. 146 * @return an {@link BooleanIterator iterator} over all my elements. 147 */ 148 BooleanIterator iterator(); 149 150 /** 151 * Returns the index of the last occurrence of the specified element 152 * within me, or -1 if I do not contain the element. 153 * 154 * @param element the element to search for 155 * @return the largest index of an element matching the specified value, 156 * or <code>-1</code> if no such matching element can be found 157 */ 158 int lastIndexOf(boolean element); 159 160 /** 161 * Returns a {@link BooleanListIterator bidirectional iterator} over 162 * all my elements, in the appropriate sequence. 163 */ 164 BooleanListIterator listIterator(); 165 166 /** 167 * Returns a {@link BooleanListIterator bidirectional iterator} over all 168 * my elements, in the appropriate sequence, starting at the specified 169 * position. The specified <i>index</i> indicates the first element that 170 * would be returned by an initial call to the {@link 171 * BooleanListIterator#next next} method. An initial call to the {@link 172 * BooleanListIterator#previous previous} method would return the element 173 * with the specified <i>index</i> minus one. 174 * 175 * @throws IndexOutOfBoundsException if the specified index is out of range 176 */ 177 BooleanListIterator listIterator(int index); 178 179 /** 180 * Removes the element at the specified position in 181 * (optional operation). Any subsequent elements 182 * are shifted to the left, subtracting one from their 183 * indices. Returns the element that was removed. 184 * 185 * @param index the index of the element to remove 186 * @return the value of the element that was removed 187 * 188 * @throws UnsupportedOperationException when this operation is not 189 * supported 190 * @throws IndexOutOfBoundsException if the specified index is out of range 191 */ 192 boolean removeElementAt(int index); 193 194 /** 195 * Replaces the element at the specified position in me with the specified 196 * element (optional operation). 197 * 198 * @param index the index of the element to change 199 * @param element the value to be stored at the specified position 200 * @return the value previously stored at the specified position 201 * 202 * @throws UnsupportedOperationException when this operation is not 203 * supported 204 * @throws IndexOutOfBoundsException if the specified index is out of range 205 */ 206 boolean set(int index, boolean element); 207 208 /** 209 * Returns a view of the elements within me between the specified 210 * <i>fromIndex</i>, inclusive, and <i>toIndex</i>, exclusive. The 211 * returned <code>BooleanList</code> is backed by me, so that any changes 212 * in the returned list are reflected in me, and vice-versa. The returned 213 * list supports all of the optional operations that I support. 214 * <p/> 215 * Note that when <code><i>fromIndex</i> == <i>toIndex</i></code>, the 216 * returned list is initially empty, and when <code><i>fromIndex</i> == 0 217 * && <i>toIndex</i> == {@link #size() size()}</code> the returned list is 218 * my "improper" sublist, containing all my elements. 219 * <p/> 220 * The semantics of the returned list become undefined if I am structurally 221 * modified in any way other than via the returned list. 222 * 223 * @param fromIndex the smallest index (inclusive) in me that appears in 224 * the returned list 225 * @param toIndex the largest index (exclusive) in me that appears in the 226 * returned list 227 * @return a view of this list from <i>fromIndex</i> (inclusive) to 228 * <i>toIndex</i> (exclusive) 229 * 230 * @throws IndexOutOfBoundsException if either specified index is out of range 231 */ 232 BooleanList subList(int fromIndex, int toIndex); 233 234 }