每日动态!【源代码】java.util.Vector容器源代码详解
这里列出java.util.Vector容器的源代码。
Vector类型声明:
public class Vectorextends AbstractList
(资料图)
接口实现:
implements List, RandomAccess, Cloneable, Serializable
实现了随意读取,可复制和可序列化接口
成员变量定义:
private static final long serialVersionUID = -2767605614048989439L;protected T[] elementData;protected int elementCount;protected int capacityIncrement;
其中,T[] elementData是Vector存储的核心,为一个泛型数组。另外有一个标志容量的变量elementCount,另一个capacityIncrement是用来表征数组elementData扩容是的增量。
Vector容器总共有四个构造函数
133: public Vector(Collection c) 134: { 135: elementCount = c.size(); 136: elementData = c.toArray((T[]) new Object[elementCount]); 137: }
如上是根据另一个容器来构造Vector容器。
148: public Vector(int initialCapacity, int capacityIncrement) 149: { 150: if (initialCapacity < 0) 151: throw new IllegalArgumentException(); 152: elementData = (T[]) new Object[initialCapacity]; 153: this.capacityIncrement = capacityIncrement; 154: }
通过初始化elementData大小和增量来初始化Vector。
163: public Vector(int initialCapacity) 164: { 165: this(initialCapacity, 0); 166: }
通过初始化elementData容量来初始化Vector,其中增量默认为0.
120: public Vector() 121: { 122: this(10, 0); 123: }
最后一个构造函数最直接了当,初始化容量10,增量为0。
然后Vector定义两个修改elementData数组的成员函数,一个负责拷贝,一个负责压缩。
179: public synchronized void copyInto(Object[] a) 180: { 181: System.arraycopy(elementData, 0, a, 0, elementCount); 182: } 189: public synchronized void trimToSize() 190: { 195: T[] newArray = (T[]) new Object[elementCount]; 196: System.arraycopy(elementData, 0, newArray, 0, elementCount); 197: elementData = newArray; 198: }
两个函数都是将现有数组复制到新的数组来实现扩容或压缩。
每当Vector有新元素添加时,需要检测当前elementData是否已满,这个函数如下,同时ensureCapacity还会将数组进行扩容:
210: public synchronized void ensureCapacity(int minCapacity) 211: { 212: if (elementData.length >= minCapacity) 213: return; 214: 215: int newCapacity; 216: if (capacityIncrement <= 0) 217: newCapacity = elementData.length * 2; 218: else 219: newCapacity = elementData.length + capacityIncrement; 220: 221: T[] newArray = (T[]) new Object[Math.max(newCapacity, minCapacity)]; 222: 223: System.arraycopy(elementData, 0, newArray, 0, elementCount); 224: elementData = newArray; 225: }
如果需要给数组制定一个新的长度可以使用setSize()方法。
236: public synchronized void setSize(int newSize) 237: { 241: modCount++; 242: ensureCapacity(newSize); 243: if (newSize < elementCount) 244: Arrays.fill(elementData, newSize, elementCount, null); 245: elementCount = newSize; 246: }
Vector提供一个迭代器来遍历数组:
287: public Enumerationelements() 288: { 289: return new Enumeration() 290: { 291: private int i = 0; 292: 293: public boolean hasMoreElements() 294: { 295: return i < elementCount; 296: } 297: 298: public T nextElement() 299: { 300: if (i >= elementCount) 301: throw new NoSuchElementException(); 302: return elementData[i++]; 303: } 304: }; 305: }
添加元素:
622: public boolean add(T o) 623: { 624: addElement(o); 625: return true; 626: }
其中添加方法定义如下:
475: public synchronized void addElement(T obj) 476: { 477: if (elementCount == elementData.length) 478: ensureCapacity(elementCount + 1); 479: modCount++; 480: elementData[elementCount++] = obj; 481: }
同时Vector支持插入操作:
650: public void add(int index, T element) 651: { 652: insertElementAt(element, index); 653: }
在添加时加入添加位置,其中插入值方法定义如下:
457: public synchronized void insertElementAt(T obj, int index) 458: { 459: checkBoundInclusive(index); 460: if (elementCount == elementData.length) 461: ensureCapacity(elementCount + 1); 462: modCount++; 463: System.arraycopy(elementData, index, elementData, index + 1, 464: elementCount - index); 465: elementCount++; 466: elementData[index] = obj; 467: }
同时也可以将一个容器直接添加到Vector中:
786: public synchronized boolean addAll(int index, Collection c) 787: { 788: checkBoundInclusive(index); 789: Iterator itr = c.iterator(); 790: int csize = c.size(); 791: 792: modCount++; 793: ensureCapacity(elementCount + csize); 794: int end = index + csize; 795: if (elementCount > 0 && index != elementCount) 796: System.arraycopy(elementData, index, 797: elementData, end, elementCount - index); 798: elementCount += csize; 799: for ( ; index < end; index++) 800: elementData[index] = itr.next(); 801: return (csize > 0); 802: }
Vector中获取制定索引的方法为:
592: public T get(int index) 593: { 594: return elementAt(index); 595: }
其实可以直接调用:
388: public synchronized T elementAt(int index) 389: { 390: checkBoundExclusive(index); 391: return elementData[index]; 392: }
修改索引值得方法:
430: public void setElementAt(T obj, int index) 431: { 432: set(index, obj); 433: }
其中set()方法定义如下:
607: public synchronized T set(int index, T element) 608: { 609: checkBoundExclusive(index); 610: T temp = elementData[index]; 611: elementData[index] = element; 612: return temp; 613: }
清除元素:
679: public void clear() 680: { 681: removeAllElements(); 682: }
其中removeAllElements()方法定义如下:
509: public synchronized void removeAllElements() 510: { 511: if (elementCount == 0) 512: return; 513: 514: modCount++; 515: Arrays.fill(elementData, 0, elementCount, null); 516: elementCount = 0; 517: }
Vector容器支持复制:
525: public synchronized Object clone() 526: { 527: try 528: { 529: Vector clone = (Vector) super.clone(); 530: clone.elementData = (Object[]) elementData.clone(); 531: return clone; 532: } 533: catch (CloneNotSupportedException ex) 534: { 535: // Impossible to get here. 536: throw new InternalError(ex.toString()); 537: } 538: }
这是一个深度复制,其中对elementData数组进行了新建。
Vector可以以数组形式输出一个给定数组中:
573: public synchronized S[] toArray(S[] a) 574: { 575: if (a.length < elementCount) 576: a = (S[]) Array.newInstance(a.getClass().getComponentType(), 577: elementCount); 578: else if (a.length > elementCount) 579: a[elementCount] = null; 580: System.arraycopy(elementData, 0, a, 0, elementCount); 581: return a; 582: }
Vector也支持截取一段子列表:
860: public synchronized ListsubList(int fromIndex, int toIndex) 861: { 862: Listsub = super.subList(fromIndex, toIndex); 865: return new Collections.SynchronizedList(this, sub); 866: }
同时也可以移除一段范围内的子数组:
878: protected void removeRange(int fromIndex, int toIndex) 879: { 880: int change = toIndex - fromIndex; 881: if (change > 0) 882: { 883: modCount++; 884: System.arraycopy(elementData, toIndex, elementData, fromIndex, 885: elementCount - toIndex); 886: int save = elementCount; 887: elementCount -= change; 888: Arrays.fill(elementData, elementCount, save, null); 889: } 890: else if (change < 0) 891: throw new IndexOutOfBoundsException(); 892: }
序列化Vector只需要调用如下方法即可:
931: private synchronized void writeObject(ObjectOutputStream s) 932: throws IOException 933: { 934: s.defaultWriteObject(); 935: }
如下提供完整源代码供浏览。
源代码
源代码来源:http://developer.classpath.org/doc/java/util/Vector-source.html
1: /* Vector.java -- Class that provides growable arrays. 2: Copyright (C) 1998, 1999, 2000, 2001, 2004, 2005, 2006, 3: Free Software Foundation, Inc. 4: 5: This file is part of GNU Classpath. 6: 7: GNU Classpath is free software; you can redistribute it and/or modify 8: it under the terms of the GNU General Public License as published by 9: the Free Software Foundation; either version 2, or (at your option) 10: any later version. 11: 12: GNU Classpath is distributed in the hope that it will be useful, but 13: WITHOUT ANY WARRANTY; without even the implied warranty of 14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15: General Public License for more details. 16: 17: You should have received a copy of the GNU General Public License 18: along with GNU Classpath; see the file COPYING. If not, write to the 19: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 20: 02110-1301 USA. 21: 22: Linking this library statically or dynamically with other modules is 23: making a combined work based on this library. Thus, the terms and 24: conditions of the GNU General Public License cover the whole 25: combination. 26: 27: As a special exception, the copyright holders of this library give you 28: permission to link this library with independent modules to produce an 29: executable, regardless of the license terms of these independent 30: modules, and to copy and distribute the resulting executable under 31: terms of your choice, provided that you also meet, for each linked 32: independent module, the terms and conditions of the license of that 33: module. An independent module is a module which is not derived from 34: or based on this library. If you modify this library, you may extend 35: this exception to your version of the library, but you are not 36: obligated to do so. If you do not wish to do so, delete this 37: exception statement from your version. */ 38: 39: 40: package java.util; 41: 42: import java.io.IOException; 43: import java.io.ObjectOutputStream; 44: import java.io.Serializable; 45: import java.lang.reflect.Array; 46: 47: /** 48: * The Vector classes implements growable arrays of Objects. 49: * You can access elements in a Vector with an index, just as you 50: * can in a built in array, but Vectors can grow and shrink to accommodate 51: * more or fewer objects.52: * 53: * Vectors try to mantain efficiency in growing by having a 54: * capacityIncrement that can be specified at instantiation. 55: * When a Vector can no longer hold a new Object, it grows by the amount 56: * in capacityIncrement. If this value is 0, the vector doubles in 57: * size.58: * 59: * Vector implements the JDK 1.2 List interface, and is therefore a fully 60: * compliant Collection object. The iterators are fail-fast - if external 61: * code structurally modifies the vector, any operation on the iterator will 62: * then throw a {@link ConcurrentModificationException}. The Vector class is 63: * fully synchronized, but the iterators are not. So, when iterating over a 64: * vector, be sure to synchronize on the vector itself. If you don"t want the 65: * expense of synchronization, use ArrayList instead. On the other hand, the 66: * Enumeration of elements() is not thread-safe, nor is it fail-fast; so it 67: * can lead to undefined behavior even in a single thread if you modify the 68: * vector during iteration.69: * 70: * Note: Some methods, especially those specified by List, specify throwing 71: * {@link IndexOutOfBoundsException}, but it is easier to implement by 72: * throwing the subclass {@link ArrayIndexOutOfBoundsException}. Others 73: * directly specify this subclass. 74: * 75: * @author Scott G. Miller 76: * @author Bryce McKinlay 77: * @author Eric Blake (ebb9@email.byu.edu) 78: * @see Collection 79: * @see List 80: * @see ArrayList 81: * @see LinkedList 82: * @since 1.0 83: * @status updated to 1.4 84: */ 85: public class Vectorextends AbstractList86: implements List, RandomAccess, Cloneable, Serializable 87: { 88: /** 89: * Compatible with JDK 1.0+. 90: */ 91: private static final long serialVersionUID = -2767605614048989439L; 92: 93: /** 94: * The internal array used to hold members of a Vector. The elements are 95: * in positions 0 through elementCount - 1, and all remaining slots are null. 96: * @serial the elements 97: */ 98: protected T[] elementData; 99: 100: /** 101: * The number of elements currently in the vector, also returned by 102: * {@link #size}. 103: * @serial the size 104: */ 105: protected int elementCount; 106: 107: /** 108: * The amount the Vector"s internal array should be increased in size when 109: * a new element is added that exceeds the current size of the array, 110: * or when {@link #ensureCapacity} is called. If <= 0, the vector just 111: * doubles in size. 112: * @serial the amount to grow the vector by 113: */ 114: protected int capacityIncrement; 115: 116: /** 117: * Constructs an empty vector with an initial size of 10, and 118: * a capacity increment of 0 119: */ 120: public Vector() 121: { 122: this(10, 0); 123: } 124: 125: /** 126: * Constructs a vector containing the contents of Collection, in the 127: * order given by the collection. 128: * 129: * @param c collection of elements to add to the new vector 130: * @throws NullPointerException if c is null 131: * @since 1.2 132: */ 133: public Vector(Collection c) 134: { 135: elementCount = c.size(); 136: elementData = c.toArray((T[]) new Object[elementCount]); 137: } 138: 139: /** 140: * Constructs a Vector with the initial capacity and capacity 141: * increment specified. 142: * 143: * @param initialCapacity the initial size of the Vector"s internal array 144: * @param capacityIncrement the amount the internal array should be 145: * increased by when necessary, 0 to double the size 146: * @throws IllegalArgumentException if initialCapacity < 0 147: */ 148: public Vector(int initialCapacity, int capacityIncrement) 149: { 150: if (initialCapacity < 0) 151: throw new IllegalArgumentException(); 152: elementData = (T[]) new Object[initialCapacity]; 153: this.capacityIncrement = capacityIncrement; 154: } 155: 156: /** 157: * Constructs a Vector with the initial capacity specified, and a capacity 158: * increment of 0 (double in size). 159: * 160: * @param initialCapacity the initial size of the Vector"s internal array 161: * @throws IllegalArgumentException if initialCapacity < 0 162: */ 163: public Vector(int initialCapacity) 164: { 165: this(initialCapacity, 0); 166: } 167: 168: /** 169: * Copies the contents of the Vector into the provided array. If the 170: * array is too small to fit all the elements in the Vector, an 171: * {@link IndexOutOfBoundsException} is thrown without modifying the array. 172: * Old elements in the array are overwritten by the new elements. 173: * 174: * @param a target array for the copy 175: * @throws IndexOutOfBoundsException the array is not large enough 176: * @throws NullPointerException the array is null 177: * @see #toArray(Object[]) 178: */ 179: public synchronized void copyInto(Object[] a) 180: { 181: System.arraycopy(elementData, 0, a, 0, elementCount); 182: } 183: 184: /** 185: * Trims the Vector down to size. If the internal data array is larger 186: * than the number of Objects its holding, a new array is constructed 187: * that precisely holds the elements. Otherwise this does nothing. 188: */ 189: public synchronized void trimToSize() 190: { 191: // Don"t bother checking for the case where size() == the capacity of the 192: // vector since that is a much less likely case; it"s more efficient to 193: // not do the check and lose a bit of performance in that infrequent case 194: 195: T[] newArray = (T[]) new Object[elementCount]; 196: System.arraycopy(elementData, 0, newArray, 0, elementCount); 197: elementData = newArray; 198: } 199: 200: /** 201: * Ensures that minCapacity elements can fit within this Vector. 202: * If elementData is too small, it is expanded as follows: 203: * If the elementCount + capacityIncrement is adequate, that 204: * is the new size. If capacityIncrement is non-zero, the 205: * candidate size is double the current. If that is not enough, the new 206: * size is minCapacity. 207: * 208: * @param minCapacity the desired minimum capacity, negative values ignored 209: */ 210: public synchronized void ensureCapacity(int minCapacity) 211: { 212: if (elementData.length >= minCapacity) 213: return; 214: 215: int newCapacity; 216: if (capacityIncrement <= 0) 217: newCapacity = elementData.length * 2; 218: else 219: newCapacity = elementData.length + capacityIncrement; 220: 221: T[] newArray = (T[]) new Object[Math.max(newCapacity, minCapacity)]; 222: 223: System.arraycopy(elementData, 0, newArray, 0, elementCount); 224: elementData = newArray; 225: } 226: 227: /** 228: * Explicitly sets the size of the vector (but not necessarily the size of 229: * the internal data array). If the new size is smaller than the old one, 230: * old values that don"t fit are lost. If the new size is larger than the 231: * old one, the vector is padded with null entries. 232: * 233: * @param newSize The new size of the internal array 234: * @throws ArrayIndexOutOfBoundsException if the new size is negative 235: */ 236: public synchronized void setSize(int newSize) 237: { 238: // Don"t bother checking for the case where size() == the capacity of the 239: // vector since that is a much less likely case; it"s more efficient to 240: // not do the check and lose a bit of performance in that infrequent case 241: modCount++; 242: ensureCapacity(newSize); 243: if (newSize < elementCount) 244: Arrays.fill(elementData, newSize, elementCount, null); 245: elementCount = newSize; 246: } 247: 248: /** 249: * Returns the size of the internal data array (not the amount of elements 250: * contained in the Vector). 251: * 252: * @return capacity of the internal data array 253: */ 254: public synchronized int capacity() 255: { 256: return elementData.length; 257: } 258: 259: /** 260: * Returns the number of elements stored in this Vector. 261: * 262: * @return the number of elements in this Vector 263: */ 264: public synchronized int size() 265: { 266: return elementCount; 267: } 268: 269: /** 270: * Returns true if this Vector is empty, false otherwise 271: * 272: * @return true if the Vector is empty, false otherwise 273: */ 274: public synchronized boolean isEmpty() 275: { 276: return elementCount == 0; 277: } 278: 279: /** 280: * Returns an Enumeration of the elements of this Vector. The enumeration 281: * visits the elements in increasing index order, but is NOT thread-safe. 282: * 283: * @return an Enumeration 284: * @see #iterator() 285: */ 286: // No need to synchronize as the Enumeration is not thread-safe! 287: public Enumerationelements() 288: { 289: return new Enumeration() 290: { 291: private int i = 0; 292: 293: public boolean hasMoreElements() 294: { 295: return i < elementCount; 296: } 297: 298: public T nextElement() 299: { 300: if (i >= elementCount) 301: throw new NoSuchElementException(); 302: return elementData[i++]; 303: } 304: }; 305: } 306: 307: /** 308: * Returns true when elem is contained in this Vector. 309: * 310: * @param elem the element to check 311: * @return true if the object is contained in this Vector, false otherwise 312: */ 313: public boolean contains(Object elem) 314: { 315: return indexOf(elem, 0) >= 0; 316: } 317: 318: /** 319: * Returns the first occurrence of elem in the Vector, or -1 if 320: * elem is not found. 321: * 322: * @param elem the object to search for 323: * @return the index of the first occurrence, or -1 if not found 324: */ 325: public int indexOf(Object elem) 326: { 327: return indexOf(elem, 0); 328: } 329: 330: /** 331: * Searches the vector starting at index for object 332: * elem and returns the index of the first occurrence of this 333: * Object. If the object is not found, or index is larger than the size 334: * of the vector, -1 is returned. 335: * 336: * @param e the Object to search for 337: * @param index start searching at this index 338: * @return the index of the next occurrence, or -1 if it is not found 339: * @throws IndexOutOfBoundsException if index < 0 340: */ 341: public synchronized int indexOf(Object e, int index) 342: { 343: for (int i = index; i < elementCount; i++) 344: if (equals(e, elementData[i])) 345: return i; 346: return -1; 347: } 348: 349: /** 350: * Returns the last index of elem within this Vector, or -1 351: * if the object is not within the Vector. 352: * 353: * @param elem the object to search for 354: * @return the last index of the object, or -1 if not found 355: */ 356: public int lastIndexOf(Object elem) 357: { 358: return lastIndexOf(elem, elementCount - 1); 359: } 360: 361: /** 362: * Returns the index of the first occurrence of elem, when 363: * searching backwards from index. If the object does not 364: * occur in this Vector, or index is less than 0, -1 is returned. 365: * 366: * @param e the object to search for 367: * @param index the index to start searching in reverse from 368: * @return the index of the Object if found, -1 otherwise 369: * @throws IndexOutOfBoundsException if index >= size() 370: */ 371: public synchronized int lastIndexOf(Object e, int index) 372: { 373: checkBoundExclusive(index); 374: for (int i = index; i >= 0; i--) 375: if (equals(e, elementData[i])) 376: return i; 377: return -1; 378: } 379: 380: /** 381: * Returns the Object stored at index. 382: * 383: * @param index the index of the Object to retrieve 384: * @return the object at index 385: * @throws ArrayIndexOutOfBoundsException index < 0 || index >= size() 386: * @see #get(int) 387: */ 388: public synchronized T elementAt(int index) 389: { 390: checkBoundExclusive(index); 391: return elementData[index]; 392: } 393: 394: /** 395: * Returns the first element (index 0) in the Vector. 396: * 397: * @return the first Object in the Vector 398: * @throws NoSuchElementException the Vector is empty 399: */ 400: public synchronized T firstElement() 401: { 402: if (elementCount == 0) 403: throw new NoSuchElementException(); 404: 405: return elementData[0]; 406: } 407: 408: /** 409: * Returns the last element in the Vector. 410: * 411: * @return the last Object in the Vector 412: * @throws NoSuchElementException the Vector is empty 413: */ 414: public synchronized T lastElement() 415: { 416: if (elementCount == 0) 417: throw new NoSuchElementException(); 418: 419: return elementData[elementCount - 1]; 420: } 421: 422: /** 423: * Changes the element at index to be obj 424: * 425: * @param obj the object to store 426: * @param index the position in the Vector to store the object 427: * @throws ArrayIndexOutOfBoundsException the index is out of range 428: * @see #set(int, Object) 429: */ 430: public void setElementAt(T obj, int index) 431: { 432: set(index, obj); 433: } 434: 435: /** 436: * Removes the element at index, and shifts all elements at 437: * positions greater than index to their index - 1. 438: * 439: * @param index the index of the element to remove 440: * @throws ArrayIndexOutOfBoundsException index < 0 || index >= size(); 441: * @see #remove(int) 442: */ 443: public void removeElementAt(int index) 444: { 445: remove(index); 446: } 447: 448: /** 449: * Inserts a new element into the Vector at index. Any elements 450: * at or greater than index are shifted up one position. 451: * 452: * @param obj the object to insert 453: * @param index the index at which the object is inserted 454: * @throws ArrayIndexOutOfBoundsException index < 0 || index > size() 455: * @see #add(int, Object) 456: */ 457: public synchronized void insertElementAt(T obj, int index) 458: { 459: checkBoundInclusive(index); 460: if (elementCount == elementData.length) 461: ensureCapacity(elementCount + 1); 462: modCount++; 463: System.arraycopy(elementData, index, elementData, index + 1, 464: elementCount - index); 465: elementCount++; 466: elementData[index] = obj; 467: } 468: 469: /** 470: * Adds an element to the Vector at the end of the Vector. The vector 471: * is increased by ensureCapacity(size() + 1) if needed. 472: * 473: * @param obj the object to add to the Vector 474: */ 475: public synchronized void addElement(T obj) 476: { 477: if (elementCount == elementData.length) 478: ensureCapacity(elementCount + 1); 479: modCount++; 480: elementData[elementCount++] = obj; 481: } 482: 483: /** 484: * Removes the first (the lowest index) occurrence of the given object from 485: * the Vector. If such a remove was performed (the object was found), true 486: * is returned. If there was no such object, false is returned. 487: * 488: * @param obj the object to remove from the Vector 489: * @return true if the Object was in the Vector, false otherwise 490: * @see #remove(Object) 491: */ 492: public synchronized boolean removeElement(Object obj) 493: { 494: int idx = indexOf(obj, 0); 495: if (idx >= 0) 496: { 497: remove(idx); 498: return true; 499: } 500: return false; 501: } 502: 503: /** 504: * Removes all elements from the Vector. Note that this does not 505: * resize the internal data array. 506: * 507: * @see #clear() 508: */ 509: public synchronized void removeAllElements() 510: { 511: if (elementCount == 0) 512: return; 513: 514: modCount++; 515: Arrays.fill(elementData, 0, elementCount, null); 516: elementCount = 0; 517: } 518: 519: /** 520: * Creates a new Vector with the same contents as this one. The clone is 521: * shallow; elements are not cloned. 522: * 523: * @return the clone of this vector 524: */ 525: public synchronized Object clone() 526: { 527: try 528: { 529: Vector clone = (Vector) super.clone(); 530: clone.elementData = (Object[]) elementData.clone(); 531: return clone; 532: } 533: catch (CloneNotSupportedException ex) 534: { 535: // Impossible to get here. 536: throw new InternalError(ex.toString()); 537: } 538: } 539: 540: /** 541: * Returns an Object array with the contents of this Vector, in the order 542: * they are stored within this Vector. Note that the Object array returned 543: * is not the internal data array, and that it holds only the elements 544: * within the Vector. This is similar to creating a new Object[] with the 545: * size of this Vector, then calling Vector.copyInto(yourArray). 546: * 547: * @return an Object[] containing the contents of this Vector in order 548: * @since 1.2 549: */ 550: public synchronized Object[] toArray() 551: { 552: Object[] newArray = new Object[elementCount]; 553: copyInto(newArray); 554: return newArray; 555: } 556: 557: /** 558: * Returns an array containing the contents of this Vector. 559: * If the provided array is large enough, the contents are copied 560: * into that array, and a null is placed in the position size(). 561: * In this manner, you can obtain the size of a Vector by the position 562: * of the null element, if you know the vector does not itself contain 563: * null entries. If the array is not large enough, reflection is used 564: * to create a bigger one of the same runtime type. 565: * 566: * @param a an array to copy the Vector into if large enough 567: * @return an array with the contents of this Vector in order 568: * @throws ArrayStoreException the runtime type of the provided array 569: * cannot hold the elements of the Vector 570: * @throws NullPointerException if a is null 571: * @since 1.2 572: */ 573: public synchronized S[] toArray(S[] a) 574: { 575: if (a.length < elementCount) 576: a = (S[]) Array.newInstance(a.getClass().getComponentType(), 577: elementCount); 578: else if (a.length > elementCount) 579: a[elementCount] = null; 580: System.arraycopy(elementData, 0, a, 0, elementCount); 581: return a; 582: } 583: 584: /** 585: * Returns the element at position index. 586: * 587: * @param index the position from which an element will be retrieved 588: * @return the element at that position 589: * @throws ArrayIndexOutOfBoundsException index < 0 || index >= size() 590: * @since 1.2 591: */ 592: public T get(int index) 593: { 594: return elementAt(index); 595: } 596: 597: /** 598: * Puts element into the Vector at position index 599: * and returns the Object that previously occupied that position. 600: * 601: * @param index the index within the Vector to place the Object 602: * @param element the Object to store in the Vector 603: * @return the previous object at the specified index 604: * @throws ArrayIndexOutOfBoundsException index < 0 || index >= size() 605: * @since 1.2 606: */ 607: public synchronized T set(int index, T element) 608: { 609: checkBoundExclusive(index); 610: T temp = elementData[index]; 611: elementData[index] = element; 612: return temp; 613: } 614: 615: /** 616: * Adds an object to the Vector. 617: * 618: * @param o the element to add to the Vector 619: * @return true, as specified by List 620: * @since 1.2 621: */ 622: public boolean add(T o) 623: { 624: addElement(o); 625: return true; 626: } 627: 628: /** 629: * Removes the given Object from the Vector. If it exists, true 630: * is returned, if not, false is returned. 631: * 632: * @param o the object to remove from the Vector 633: * @return true if the Object existed in the Vector, false otherwise 634: * @since 1.2 635: */ 636: public boolean remove(Object o) 637: { 638: return removeElement(o); 639: } 640: 641: /** 642: * Adds an object at the specified index. Elements at or above 643: * index are shifted up one position. 644: * 645: * @param index the index at which to add the element 646: * @param element the element to add to the Vector 647: * @throws ArrayIndexOutOfBoundsException index < 0 || index > size() 648: * @since 1.2 649: */ 650: public void add(int index, T element) 651: { 652: insertElementAt(element, index); 653: } 654: 655: /** 656: * Removes the element at the specified index, and returns it. 657: * 658: * @param index the position from which to remove the element 659: * @return the object removed 660: * @throws ArrayIndexOutOfBoundsException index < 0 || index >= size() 661: * @since 1.2 662: */ 663: public synchronized T remove(int index) 664: { 665: checkBoundExclusive(index); 666: T temp = elementData[index]; 667: modCount++; 668: elementCount--; 669: if (index < elementCount) 670: System.arraycopy(elementData, index + 1, elementData, index, 671: elementCount - index); 672: elementData[elementCount] = null; 673: return temp; 674: } 675: 676: /** 677: * Clears all elements in the Vector and sets its size to 0. 678: */ 679: public void clear() 680: { 681: removeAllElements(); 682: } 683: 684: /** 685: * Returns true if this Vector contains all the elements in c. 686: * 687: * @param c the collection to compare to 688: * @return true if this vector contains all elements of c 689: * @throws NullPointerException if c is null 690: * @since 1.2 691: */ 692: public synchronized boolean containsAll(Collection c) 693: { 694: // Here just for the sychronization. 695: return super.containsAll(c); 696: } 697: 698: /** 699: * Appends all elements of the given collection to the end of this Vector. 700: * Behavior is undefined if the collection is modified during this operation 701: * (for example, if this == c). 702: * 703: * @param c the collection to append 704: * @return true if this vector changed, in other words c was not empty 705: * @throws NullPointerException if c is null 706: * @since 1.2 707: */ 708: public synchronized boolean addAll(Collection c) 709: { 710: return addAll(elementCount, c); 711: } 712: 713: /** 714: * Remove from this vector all elements contained in the given collection. 715: * 716: * @param c the collection to filter out 717: * @return true if this vector changed 718: * @throws NullPointerException if c is null 719: * @since 1.2 720: */ 721: public synchronized boolean removeAll(Collection c) 722: { 723: // The NullPointerException is thrown implicitly when the Vector 724: // is not empty and c is null. The RI allows null arguments when 725: // the vector is empty. See Mauve test: 726: // gnu/testlet/java/util/Vector/removeAll.java 727: 728: int i; 729: int j; 730: for (i = 0; i < elementCount; i++) 731: if (c.contains(elementData[i])) 732: break; 733: if (i == elementCount) 734: return false; 735: 736: modCount++; 737: for (j = i++; i < elementCount; i++) 738: if (! c.contains(elementData[i])) 739: elementData[j++] = elementData[i]; 740: elementCount -= i - j; 741: return true; 742: } 743: 744: /** 745: * Retain in this vector only the elements contained in the given collection. 746: * 747: * @param c the collection to filter by 748: * @return true if this vector changed 749: * @throws NullPointerException if c is null 750: * @since 1.2 751: */ 752: public synchronized boolean retainAll(Collection c) 753: { 754: // The NullPointerException is thrown implicitly when the Vector 755: // is not empty and c is null. The RI allows null arguments when 756: // the vector is empty. See Mauve test: 757: // gnu/testlet/java/util/Vector/retainAll.java 758: 759: int i; 760: int j; 761: for (i = 0; i < elementCount; i++) 762: if (! c.contains(elementData[i])) 763: break; 764: if (i == elementCount) 765: return false; 766: 767: modCount++; 768: for (j = i++; i < elementCount; i++) 769: if (c.contains(elementData[i])) 770: elementData[j++] = elementData[i]; 771: elementCount -= i - j; 772: return true; 773: } 774: 775: /** 776: * Inserts all elements of the given collection at the given index of 777: * this Vector. Behavior is undefined if the collection is modified during 778: * this operation (for example, if this == c). 779: * 780: * @param c the collection to append 781: * @return true if this vector changed, in other words c was not empty 782: * @throws NullPointerException if c is null 783: * @throws ArrayIndexOutOfBoundsException index < 0 || index > size() 784: * @since 1.2 785: */ 786: public synchronized boolean addAll(int index, Collection c) 787: { 788: checkBoundInclusive(index); 789: Iterator itr = c.iterator(); 790: int csize = c.size(); 791: 792: modCount++; 793: ensureCapacity(elementCount + csize); 794: int end = index + csize; 795: if (elementCount > 0 && index != elementCount) 796: System.arraycopy(elementData, index, 797: elementData, end, elementCount - index); 798: elementCount += csize; 799: for ( ; index < end; index++) 800: elementData[index] = itr.next(); 801: return (csize > 0); 802: } 803: 804: /** 805: * Compares this to the given object. 806: * 807: * @param o the object to compare to 808: * @return true if the two are equal 809: * @since 1.2 810: */ 811: public synchronized boolean equals(Object o) 812: { 813: // Here just for the sychronization. 814: return super.equals(o); 815: } 816: 817: /** 818: * Computes the hashcode of this object. 819: * 820: * @return the hashcode 821: * @since 1.2 822: */ 823: public synchronized int hashCode() 824: { 825: // Here just for the sychronization. 826: return super.hashCode(); 827: } 828: 829: /** 830: * Returns a string representation of this Vector in the form 831: * "[element0, element1, ... elementN]". 832: * 833: * @return the String representation of this Vector 834: */ 835: public synchronized String toString() 836: { 837: // Here just for the sychronization. 838: return super.toString(); 839: } 840: 841: /** 842: * Obtain a List view of a subsection of this list, from fromIndex 843: * (inclusive) to toIndex (exclusive). If the two indices are equal, the 844: * sublist is empty. The returned list is modifiable, and changes in one 845: * reflect in the other. If this list is structurally modified in 846: * any way other than through the returned list, the result of any subsequent 847: * operations on the returned list is undefined. 848: * 849: * 850: * @param fromIndex the index that the returned list should start from 851: * (inclusive) 852: * @param toIndex the index that the returned list should go to (exclusive) 853: * @return a List backed by a subsection of this vector 854: * @throws IndexOutOfBoundsException if fromIndex < 0 855: * || toIndex > size() 856: * @throws IllegalArgumentException if fromIndex > toIndex 857: * @see ConcurrentModificationException 858: * @since 1.2 859: */ 860: public synchronized ListsubList(int fromIndex, int toIndex) 861: { 862: Listsub = super.subList(fromIndex, toIndex); 863: // We must specify the correct object to synchronize upon, hence the 864: // use of a non-public API 865: return new Collections.SynchronizedList(this, sub); 866: } 867: 868: /** 869: * Removes a range of elements from this list. 870: * Does nothing when toIndex is equal to fromIndex. 871: * 872: * @param fromIndex the index to start deleting from (inclusive) 873: * @param toIndex the index to delete up to (exclusive) 874: * @throws IndexOutOfBoundsException if fromIndex > toIndex 875: */ 876: // This does not need to be synchronized, because it is only called through 877: // clear() of a sublist, and clear() had already synchronized. 878: protected void removeRange(int fromIndex, int toIndex) 879: { 880: int change = toIndex - fromIndex; 881: if (change > 0) 882: { 883: modCount++; 884: System.arraycopy(elementData, toIndex, elementData, fromIndex, 885: elementCount - toIndex); 886: int save = elementCount; 887: elementCount -= change; 888: Arrays.fill(elementData, elementCount, save, null); 889: } 890: else if (change < 0) 891: throw new IndexOutOfBoundsException(); 892: } 893: 894: /** 895: * Checks that the index is in the range of possible elements (inclusive). 896: * 897: * @param index the index to check 898: * @throws ArrayIndexOutOfBoundsException if index > size 899: */ 900: private void checkBoundInclusive(int index) 901: { 902: // Implementation note: we do not check for negative ranges here, since 903: // use of a negative index will cause an ArrayIndexOutOfBoundsException 904: // with no effort on our part. 905: if (index > elementCount) 906: throw new ArrayIndexOutOfBoundsException(index + " > " + elementCount); 907: } 908: 909: /** 910: * Checks that the index is in the range of existing elements (exclusive). 911: * 912: * @param index the index to check 913: * @throws ArrayIndexOutOfBoundsException if index >= size 914: */ 915: private void checkBoundExclusive(int index) 916: { 917: // Implementation note: we do not check for negative ranges here, since 918: // use of a negative index will cause an ArrayIndexOutOfBoundsException 919: // with no effort on our part. 920: if (index >= elementCount) 921: throw new ArrayIndexOutOfBoundsException(index + " >= " + elementCount); 922: } 923: 924: /** 925: * Serializes this object to the given stream. 926: * 927: * @param s the stream to write to 928: * @throws IOException if the underlying stream fails 929: * @serialData just calls default write function 930: */ 931: private synchronized void writeObject(ObjectOutputStream s) 932: throws IOException 933: { 934: s.defaultWriteObject(); 935: } 936: 937: }
标签:
相关推荐:
精彩放送:
- []每日快看:今日埃迪库里和库里 埃迪库里怎么了?
- []8轮融资后,镁信健康上市之路依然坎坷
- []今日往生咒的原文 《往生咒》的全文内容是什么?
- []财神是谁的原型?揭秘财神的原型
- []即时看!唯愿当歌对酒时 月光长照金樽里是友情吗?
- []环球实时:五红水可以天天喝吗?红枣补气血的方法
- []中海地产:1月中国海外系列公司合约物业销售额约人民币131.88亿元
- []【世界新视野】violetta酵素有用吗?红木有哪些类别?
- []一台空调一小时用多少电?空调耗电如何计算?
- []世界今日报丨短裤的英语单词是什么?短裤的英语单词
- []全球热议:雪榕生物:公司目前生产经营一切正常
- []要闻速递:打印机和复印机的辐射量有多大?打印机和复印机的辐射量
- []【环球速看料】关于硬卧图片素材你了解多少?关于硬卧图片素材
- []世界速读:ipad tv电视棒使用方法 ipad tv电视棒怎么用?
- []环球视点!negative是什么意思?negative的用法
- []控股股东股份被轮候冻结 ST中利说明情况
- []热讯:腾龙镜头多少钱?腾龙镜头型号及报价大全
- []每日聚焦:华凌空调怎么样?华凌空调有哪些特点?
- []世界热议:机构预测2023年底前金银涨约14%,铂的回报将最大!
- []当前热门:微信聊天记录如何备份转移到另外一个手机上?操作步骤
- []博客积分如何计算?CSDN积分规则
- []【进程隐藏之内核】EPROCESSSS结构体
- []全球热推荐:中原建业:1月拥有3个新签合约项目
- []环球热点评!乐视手机怎么样?乐视手机好用吗?
- []今日讯!信知生男恶是什么?信知生男恶详情介绍
- []世界快报:java命令行中的DstRpcServer怎么运行?操作步骤
- []西瓜足迹用不了怎么办?怎么回事?
- []当前短讯!暗黑3怎么购买?暗黑3国服购买指南
- []焦点精选!My97DatePickerBeta日期控件乱码问题解决办法
- []通讯!k-d树和bbf算法 一直递归子树的数据点集算法
- []全球即时:天佑武汉 天佑种花家!爬之分析之各省数据入口
- []白杨树的特点象征意义 关于白杨树的特点
- []微速讯:WFXSVC.EXE WFXSVC.EXE进程是什么?有什么用?
- []当前消息!2022年值得入手的大屏手机 2022高性价比手机排行榜
- []天天热文:Emulex公司介绍 Emulex公司获SolarisReady认证
- []关于购物商场的介绍 你知道多少?
- []iphone表情符号如何添加?iphone表情符号添加方法
- []天天观察:天似穹庐中的穹庐是什么意思?详情介绍
- []索尼投影机价格怎么样?sony投影机功能如何?
- []睑怎么读?眼睑发音及解释
- []全球热讯:罗盘针什么时候传入欧洲?罗盘针什么时候发明的?
- []关注:一士类稿
- []少女时代歌词是什么?少女时代歌词大全
- []焦点信息:《剑网三》玲珑密保锁解除问题解决方案相关教程
- []聚焦:什么是电极的极化电压?电极与电解质溶液界面的电位差
- []精彩看点:【C语言网】国内领先的综合性编程学习网站
- []微动态丨tcl液晶监视器你了解多少?tcl液晶监视器的价格
- []世界快播:网卡是什么?网卡有什么功能?
- []部门组织结构及分工设想——技术总监、技术运维组
- []天天快看:多达60个网站 免费下载免费的3D模型
- []环球通讯!索尼psp游戏机多少钱?索尼psp报价及相关介绍
- []【天天速看料】NET是什么?netFramework是一个品牌商标推出的?
- []当前关注:Java的类型是什么?byte字节型占一个字节(8bit)的数据范围
- []三星c3500怎么样?三星c3500最新报价
- []硕美科g927怎么样?硕美科g927好不好?
- []【环球播资讯】win10关闭自动更新后怎么更新?win10关闭自动更新后更新方法
- []【天天新视野】数学书中求多项式系数的问题 编程上怎么办?
- []全球即时:如何一次性删除全部页眉页脚?Word中删除全部页眉页脚的方法
- []最新资讯:华电、华润等7家企业签约阿拉善腾格里沙漠12GW风光基地项目
- []热点!数码相机销量排行榜 看看你的品牌排第几?
- []分享100个有趣的python项目 值得收藏
- []全球今日报丨激光器结构原理是什么?激光器结构原理介绍
- []低温地区新能源汽车能耗逐年下降
- []当前热点-世界上最大的会计事务所——Pricewaterhouse
- []四年一遇:ngix+rtmp+ffmpeg的直播效果
- []最新资讯:3MW/6MWh!粤北地区首个用户侧智能组串式储能项目成功投运
- []焦点快看:【Linux操作系统】系统调用和库函数编程基础知识
- []当前快报:重庆:争夺西部第一机场?
- []环球要闻:2.5万吨!华友钴业子公司广西巴莫首批正极材料产品下线
- []硅片反弹!中环硅片全线涨价0.82~1.15元/片 ,最高涨幅近15.5%!
- []热点在线丨春秋航空:疯狂
- []【速看料】凤形股份:为保证所有投资者平等获悉公司信息,公司将在各期定期报告中披露对应时点的股东人数信息
- []滨江集团:截至2023年1月31日,公司合并普通账户和融资融券信用账户的在册股东总户数为31303户
- []金科联盟解体
- []有研粉材:定期报告对应时点之外的股东人数不属于规则规定的强制信息披露范畴
- []最新:财面儿丨首开股份:近期为子公司提供财务资助约3亿元
- []每日短讯:房企关注函+1!阳光城巨额亏损被深交所“盯”上
- []全球视点!财面儿丨保利置业:1月份合约销售额49亿元 同比增长105%
- []珠城科技:公司的产品主要应用于消费类家电、智能终端等,同时以汽车领域作为公司未来的重要发展方向
- []焦点短讯!农民进城买房,一套补贴5万!河南一地启动购房促销活动
- []【天天聚看点】盛新锂能发行GDR并在瑞交所上市获批 2022年净利同比预增超5倍
- []豪掷31亿元!英联股份拟投建锂电复合铜箔/铝箔生产线
- []快讯:中金货币金融研究:1月信贷投放规模可能达到4.8万亿元 规模或创记录
- []储能有望延续高景气度 2023年或成为爆发之年
- []全球视点!银河证券:A股市场进入颠簸期 配置沿几条主线
- []实时:光大证券:半固态电池应运而生 抢占下一代锂电技术制高点
- []湖北省:1GW新型储能示范项目申报启动,锂电项目不参与
- []环球热推荐:春节出游潮退潮后,处处是“坑”
- []关注:储能安全新国标正式发布!储能消防市场将迈向百亿级空间
- []【全球报资讯】近1.6万次!基金经理、机构忙调研
- []天天播报:佳源国际控股:进一步延长交换要约届满期限至3月6日
- []税后工资8000税前是多少?年收入多少要交个人所得税?
- []【天天新视野】西安未央区即将面向全市发放共计1000万元电子消费券
- []焦点速读:一晚七家公司被调查,有公司掩埋凭证,挖出9米宽5米深大坑!数据特区概念爆发
- []全球即时:最新龙虎榜:机构买入润和软件超8000万,知名游资买入广博股份
- []平均工资是税前工资还是税后工资?平均工资是怎么算的?
- []2022平均工资怎么计算?2022年度社会平均工资怎么算?
- []世界热点评!谁是2022旅游出行“预亏王”?
- []脑梗“最爱”1黄,不是花生,平时敞开吃,血脂乖乖降,脑梗不敢放肆
- []全球看点:62度电池跑320公里,4秒内破百,Everrati推出保时捷911纯电版
- 如何给鲜玉米保鲜储存 玉米保鲜储存方法
- 全球快消息!F1威廉姆斯车队发布2023赛季新车涂装
- 今日热闻!建业地产1月合同销售额28.71亿元 同比增长43%
- 环球热资讯!上海现代农业产业园(横沙新洲)规划公布 2035年园区总产值超百亿
- 热门看点:北京数据特区发酵 多家公司摩拳擦掌备战
- 环球时讯:免押金、佣金打折!北京为返工租客筹集53万套优惠房源
- 环球快播:深圳:降低企业用房成本
- 海南推动土地节约集约利用:控制新增建设用地,保障生活用地
- 数码视讯:2月3日公司高管郑海涛减持公司股份合计4.68万股
- 观焦点:天秦装备:2月3日公司高管张澎、王兆君减持公司股份合计11万股
- 世界视点!炼石航空:2月3日公司高管张政减持公司股份合计10万股
- 绿城集团2023年首月总合约销售135亿元 同比下降7.53%
- 世界资讯:中际旭创:2月3日公司高管王军减持公司股份合计10000股
- 焦点快报!时来天地皆同力 2023年或迎来“戴维斯双击”——访重阳投资董事长王庆
- 微头条丨八大券商主题策略:超级快充时代来临!远期市场空间超千亿 充电桩概念风起云涌
- 焦点热门:北交所强势开局 私募看好今年投资机会
- 今日观点!中信证券:内资开始接力外资 成长风格将持续占优
- 当前简讯:灰姑娘的故事简介50字_灰姑娘的故事简介
- 世界实时:土地周报 | 供求价持续低位运行,流拍率接近20%(01.30-02.05)
- 世界信息:深圳二手房交易量呈现快速恢复态势
- 引力传媒:2月3日公司高管罗衍记、李浩减持公司股份合计40万股
- 哈尔滨:鼓励在哈金融机构加大房地产领域信贷投放
- 奇安信:2月1日至2月2日左文建减持公司股份合计1.4万股
- 【环球新要闻】新房周报 | 12城调控放松、多地下调利率,成交回升(01.30-02.05)
- 环球微动态丨资本月报|融资环境有所改善,房企配股较为积极 (2023年1月)
- 今日视点:理工导航:2月3日至2月6日公司高管高志峰增持公司股份合计1.01万股
- 世界今日讯!环球旅讯发力商旅&MICE赛道:推出商旅研习社及年度活动规划
- 全球信息:中交地产:湖南华夏完成减持1.21%股份 重庆渝富减持股份达到1%
- 世界快报:公共车辆全面电动化试点启动,利好充电服务商
- 微信加人限制如何解除_微信加人限制怎么解除
- 环球速讯:由于后者资金问题 大唐集团终止出售厦门商管公司予广西吉顺隆
- 每日观察!天虹股份变更公司签字注册会计师及质量复核人员
- 华侨城A:公司唐镇项目经上海市张江管委会、工商监督部门调查已判定没有违规开发和虚假宣传
- 【全球时快讯】武汉:动态调整住房限购范围 住房限购区域购房的居民家庭可新增一个购房资格
- 世界球精选!财面儿|融信中国1月合约销售额约9.95亿元
- 实时焦点:磁谷科技:公司目前在手订单充足,业务拓展持续稳健进行
- 财面儿丨雅居乐:1月预售金额合计为人民币64.4亿元
- 天天微头条丨财面儿丨金地商置:1月份合约销售额22.96亿元
- 德赛西威:公司严格按照相关法规要求进行财务数据的发布
- 当前资讯!山东新年“1号文件”力促经济复苏 一季度重点项目完成投资6000亿元以上
- 世界焦点!财面儿丨力高集团:1月份合约销售额13.23亿元
- 环球热资讯!金地商置1月合约销售额22.96亿元 同比减少约59.68%
- 中国奥园:以5.84亿元出售珠海翠微项目60%股权
- 全球简讯:长沙:截至今年1月底,盘活存量房1.28万套
- 天天观天下!开开实业:公司是以中医药流通、中医药学服务(中医问诊服务)和服装批发、零售为主营业务
- 哈尔滨:非哈市户籍在哈购新房可享万元补贴
- 美吉姆:公司目前未应用过该软件
- 环球最新:昆船智能:截至2023年1月30日我公司股东总数为29533户
- 天天热议:招商局置地:余志良辞任总经理,黄竞源获委任
- 世界快资讯:思安云创成功签约深能集团智慧能源监控平台及高级应用研发项目
- 储能业务持续向好 南都电源预计2022年扭亏为盈
- 环球通讯!2022锂钴价格背道而驰,2023供应过剩延续钴价继续滑落?
- 观速讯丨业绩持续逆天,还在持续大爆发的龙头,关键已经不贵了
- 一个鼻孔通气的生肖_一个鼻孔通气的危害
- 隆基绿能:拟向全资子公司增资20亿元 推进29GW高效单晶电池项目
- 接入光伏、储能、充电桩等更省事 湖北首个“源网荷储”新型配电网试点建成
- 视讯!孚能科技引领全球动力软包创新 SPS大软包超级电池“攻城掠地”
- 热文:复地(集团)10亿债券将于2月14日兑付及摘牌 票面利率5.60%
- 环球观热点:提供适配房源53万套 北京推出惠民租房服务平台
- 聚焦:【互动掘金】国脉科技:将积极研究ChatGPT与现有技术的融合
- 华瑞股份:截止2023年1月31曰,公司股东人数为10590户
- 焦点速看:中衍期货:美国非农表现强劲给金银压力
- 焦点快播:华测检测:公司回购方案的有效期至2023年3月13日,会按照回购方案积极推进
- 世界新消息丨冠昊生物:本维莫德乳膏其他适应症的研发有序推进中,公司的研发项目进展情况,敬请查阅公司定期报告
- 焦点热讯:武汉:在住房限购区域购房的居民家庭可新增一个购房资格
- 快报:武汉:新出让土地可按照不低于起始价的10%确定竞买保证金
- 环球即时看!武汉:具备条件的大型购物中心、商业综合体和商业街区可设置外摆
- 焦点要闻:印度狂买俄油符合西方利益?美国官员:价格上限机制已落实到位
- 科润新材料完成C轮2.4亿融资 全氟离子膜已应用于钒电池等领域
- 今日快看!*ST必康拟增资子公司并设立孙公司 布局锂电池、电池材料产业
- 资讯推荐:动力电池铝箔产销量同比大增 鼎胜新材2022年净利同比预增逾两倍
- 天天微头条丨电池化学品销量增长 新宙邦2022年营收约96.61亿
- 110亿元!志存锂业拟在新疆阿勒泰投建碳酸锂及正极材料项目
- 名师讲坛 | “二十四史”视角下的《元史》
- 世界新动态:深圳发布金融科技专项发展规划 打造国际影响力金融科技中心城市
- 环球视讯!都城伟业集团接盘鲁能集团转让的郑州鲁能置业100%股权
- 当前热门:2月6日英可瑞涨停分析:充电桩,氢能源/燃料电池,高铁轨交概念热股
- 2月6日江南化工涨停分析:人工智能,民爆,手势识别概念热股
- 环球播报:2月6日汉马科技涨停分析:垃圾分类,氢能源/燃料电池,重卡概念热股
- 处四会五达之地,融人文商业之机——百年阪急的中国宁波之旅
- 世界最新:江阴银行:我行严格遵守监管部门相关规定,目前未开展互联网存款业务
- 【新要闻】衢州开化县一宗商住地因宗地使用条件变更终止出让 起价1.73亿
- 每日速讯:飞行汽车完成今年首飞!万亿市场何时开启?
- 即时:江苏常州金坛盐穴压缩空气储能电站—— 赋能地下盐穴 助力高效用能
- 产销量暴增300%!产线昼夜不停!铜箔为什么这么火?
- 焦点讯息:突发!锂电池着火引发火灾致4死3伤 !
- 天天新消息丨3MW/6MWh!粤北地区首个用户侧智能组串式储能项目成功投运
- 3GWh电芯采购 | 浙商中拓与上海兰钧签订战略合作协议
- 最新消息:上海宝龙实业发展15亿元中票获反馈
- 环球看点!中公教育:根据深交所相关规则,符合需要披露年度业绩预告的情形的公司应在2023年1月31日前进行预告
- 全球看点:中交地产三笔中票项目状态更新为“反馈中” 金额共计22亿元
- 温州生态园开发建设5.4亿元私募债更新为“已反馈”
- 每日热点:【BT金融分析师】瑞幸咖啡或在2023年重新上市,分析师称新店开张速度令人瞩目
- 福州台江区37个老旧小区改造项目启动招标 总投资1.38亿元
- 广州:至2035年推进城市更新约300平方公里 推进旧改项目297个
- 每日快报!奥维通信:公司目前没有涉及相关业务
- 今热点:航发科技:公司将严格执行相关法律法规、公司信息披露制度和内幕信息知情人登记制度的规定
- 焦点消息!两天1500元,租车爆单了
- 能链智电与开瑞新能源达成战略合作 加速商用车电动化进程
- 动态焦点:2019双子座流星雨极大时间_2019双子座流星雨