下面列出了java.util.concurrent.CopyOnWriteArrayList#addAll ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* 添加一个DataID对应的一些ManagerListener
*
* @param dataId
* @param addListeners
*/
public void addManagerListeners(String dataId, String group, List<ManagerListener> addListeners) {
if (null == dataId || null == addListeners) {
return;
}
if (addListeners.size() == 0) {
return;
}
String key = makeKey(dataId, group);
CopyOnWriteArrayList<ManagerListener> listenerList = allListeners.get(key);
if (listenerList == null) {
listenerList = new CopyOnWriteArrayList<ManagerListener>();
CopyOnWriteArrayList<ManagerListener> oldList = allListeners.putIfAbsent(key, listenerList);
if (oldList != null) {
listenerList = oldList;
}
}
listenerList.addAll(addListeners);
}
/**
* 添加一个DataID对应的一些ManagerListener
*
* @param dataId
* @param addListeners
*/
public void addManagerListeners(String dataId, String group, List<ManagerListener> addListeners) {
if (null == dataId || null == addListeners) {
return;
}
if (addListeners.size() == 0) {
return;
}
String key = makeKey(dataId, group);
CopyOnWriteArrayList<ManagerListener> listenerList = allListeners.get(key);
if (listenerList == null) {
listenerList = new CopyOnWriteArrayList<ManagerListener>();
CopyOnWriteArrayList<ManagerListener> oldList = allListeners.putIfAbsent(key, listenerList);
if (oldList != null) {
listenerList = oldList;
}
}
listenerList.addAll(addListeners);
}
/**
* Gets the minimal tests.
*
* @param testSets
* the test sets
* @return the minimal tests
*/
private static CopyOnWriteArrayList<ArrayList<String>> getMinimalTests(CopyOnWriteArrayList<ArrayList<String>> testSets) {
CopyOnWriteArrayList<ArrayList<String>> result = new CopyOnWriteArrayList<>();
List<ArrayList<String>> testSets2 = new CopyOnWriteArrayList<ArrayList<String>>();
List<ArrayList<String>> testSets3 = new CopyOnWriteArrayList<ArrayList<String>>();
testSets2.addAll(testSets);
testSets3.addAll(testSets);
for (ArrayList<String> test : testSets3) {
for (ArrayList<String> test2 : testSets2) {
if (test.containsAll(test2) && !test2.containsAll(test)) {
testSets.remove(test);
testSets2.remove(test);
testSets3.remove(test);
System.out.println("remove test "+test);
break;
}
}
}
result.addAll(testSets);
return result;
}
public void testAddAll1_IndexOutOfBoundsException() {
try {
CopyOnWriteArrayList c = new CopyOnWriteArrayList();
c.addAll(-1, new LinkedList()); // should throw IndexOutOfBoundsException
} catch (IndexOutOfBoundsException e) {
}
}
public void testIteratorAndNonStructuralChanges() {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();
list.addAll(Arrays.asList("a", "b", "c", "d", "e"));
Iterator<String> abcde = list.iterator();
assertEquals("a", abcde.next());
list.set(1, "B");
assertEquals("b", abcde.next());
assertEquals("c", abcde.next());
assertEquals("d", abcde.next());
assertEquals("e", abcde.next());
}
/**
* The sub list throws on non-structural changes, even though that disagrees
* with the subList() documentation which suggests that only size-changing
* operations will trigger ConcurrentModificationException.
*/
public void testSubListAndNonStructuralChanges() {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();
list.addAll(Arrays.asList("a", "b", "c", "d", "e"));
List<String> bcd = list.subList(1, 4);
list.set(2, "C");
try {
bcd.get(1);
fail();
} catch (ConcurrentModificationException expected) {
}
}
public void testSubListAndStructuralChanges() {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();
list.addAll(Arrays.asList("a", "b", "c", "d", "e"));
List<String> bcd = list.subList(1, 4);
list.clear();
try {
bcd.get(1);
fail();
} catch (ConcurrentModificationException expected) {
}
}
public void testSubListAndSizePreservingStructuralChanges() {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();
list.addAll(Arrays.asList("a", "b", "c", "d", "e"));
List<String> bcd = list.subList(1, 4);
list.clear();
list.addAll(Arrays.asList("A", "B", "C", "D", "E"));
try {
bcd.get(1);
fail();
} catch (ConcurrentModificationException expected) {
}
}
public void testRemoveAll() {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();
list.addAll(Arrays.asList("a", "b", "c", "d", "e"));
list.removeAll(Arrays.asList());
assertEquals(Arrays.asList("a", "b", "c", "d", "e"), list);
list.removeAll(Arrays.asList("e"));
assertEquals(Arrays.asList("a", "b", "c", "d"), list);
list.removeAll(Arrays.asList("b", "c"));
assertEquals(Arrays.asList("a", "d"), list);
}
public void testSubListClear() {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();
list.addAll(Arrays.asList("a", "b", "c", "d", "e"));
List<String> bcd = list.subList(1, 4);
bcd.clear();
assertEquals(Arrays.asList("a", "e"), list);
bcd.addAll(Arrays.asList("B", "C", "D"));
assertEquals(Arrays.asList("a", "B", "C", "D", "e"), list);
}
public void testSubListIteratorGetsSnapshot() {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();
list.addAll(Arrays.asList("a", "b", "c", "d", "e"));
Iterator<String> bcd = list.subList(1, 4).iterator();
list.clear();
assertEquals("b", bcd.next());
assertEquals("c", bcd.next());
assertEquals("d", bcd.next());
assertFalse(bcd.hasNext());
}
public void testSubListRemoveByValue() {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();
list.addAll(Arrays.asList("a", "b", "c", "d", "e"));
List<String> bcd = list.subList(1, 4);
bcd.remove("c"); // the RI fails here
assertEquals(Arrays.asList("b", "d"), bcd);
assertEquals(Arrays.asList("a", "b", "d", "e"), list);
}
public void testSubListRemoveByIndex() {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();
list.addAll(Arrays.asList("a", "b", "c", "d", "e"));
List<String> bcd = list.subList(1, 4);
bcd.remove(1);
assertEquals(Arrays.asList("b", "d"), bcd);
assertEquals(Arrays.asList("a", "b", "d", "e"), list);
}
public void testSubListRetainAll() {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();
list.addAll(Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i"));
List<String> def = list.subList(3, 6);
def.retainAll(Arrays.asList("c", "e", "h")); // the RI fails here
assertEquals(Arrays.asList("a", "b", "c", "e", "g", "h", "i"), list);
assertEquals(Arrays.asList("e"), def);
}
public void testSubListRemoveAll() {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();
list.addAll(Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i"));
List<String> def = list.subList(3, 6);
def.removeAll(Arrays.asList("c", "e", "h")); // the RI fails here
assertEquals(Arrays.asList("a", "b", "c", "d", "f", "g", "h", "i"), list);
assertEquals(Arrays.asList("d", "f"), def);
}
public void testSubListAddIsAtEnd() {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();
list.addAll(Arrays.asList("a", "b", "c", "d", "e"));
List<String> bcd = list.subList(1, 4);
bcd.add("f");
assertEquals(Arrays.asList("a", "b", "c", "d", "f", "e"), list);
assertEquals(Arrays.asList("b", "c", "d", "f"), bcd);
}
public void testSubListAddAll() {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();
list.addAll(Arrays.asList("a", "b", "c", "d", "e"));
List<String> bcd = list.subList(1, 4);
bcd.addAll(1, Arrays.asList("f", "g", "h", "i"));
assertEquals(Arrays.asList("a", "b", "f", "g", "h", "i", "c", "d", "e"), list);
assertEquals(Arrays.asList("b", "f", "g", "h", "i", "c", "d"), bcd);
}
public void testListIterator() {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();
list.addAll(Arrays.asList("a", "b", "c", "d", "e"));
ListIterator<String> i = list.listIterator(5);
list.clear();
assertEquals(5, i.nextIndex());
assertEquals(4, i.previousIndex());
assertEquals("e", i.previous());
assertEquals(4, i.nextIndex());
assertEquals(3, i.previousIndex());
assertTrue(i.hasNext());
assertTrue(i.hasPrevious());
assertEquals("d", i.previous());
assertEquals(3, i.nextIndex());
assertEquals(2, i.previousIndex());
assertTrue(i.hasNext());
assertTrue(i.hasPrevious());
assertEquals("c", i.previous());
assertEquals(2, i.nextIndex());
assertEquals(1, i.previousIndex());
assertTrue(i.hasNext());
assertTrue(i.hasPrevious());
assertEquals("b", i.previous());
assertEquals(1, i.nextIndex());
assertEquals(0, i.previousIndex());
assertTrue(i.hasNext());
assertTrue(i.hasPrevious());
assertEquals("a", i.previous());
assertEquals(0, i.nextIndex());
assertEquals(-1, i.previousIndex());
assertTrue(i.hasNext());
assertFalse(i.hasPrevious());
try {
i.previous();
fail();
} catch (NoSuchElementException expected) {
}
}