![java集合梳理 - bohu83 - bohu83的博客 java集合梳理 - bohu83 - bohu83的博客](http://img0.ph.126.net/xAHRVIDQ9SVS0q7H0Gwllw==/4916523418305366708.gif)
add()
方法向Collection中增加元素,如果Collection结构改变了,作为add()
方法的结果,将返回true。如果一个Set
的实例中已经存在了这个元素,那么不会重复增加,这个Set
实例的结构也不会发生变化。另一方面,如果在一个List
上调用这个方法,而这个List
已经存在了这个元素,那么这个List
将有两个这个元素。remove()
方法移除一个元素。如果Collection中存在这个元素并且被移除了,这个方法将返回true。如果元素不存在,将返回false。这是对单个元素的操作,对应操作多个元素还有addAll(),removeAll().retainAll()
方法正好和removeAll()
方法相反。不是移除所有给定参数Collection中元素,而是保留保留这些元素,移除其他的。
检测一个Collection是否包含一个确定的元素
contains()
和
containsAll()
方法。
Collection大小
你可以通过调用size()
方法来检测一个Collection的大小,”Size“表示Collection中的元素个数。
迭代一个Collection
你可以迭代collection中的所有元素,collection中包含的Iterator将完成这件事情,就像下面这样:
1 | Collection collection = new HashSet(); |
2 | //... add elements to the collection |
3 |
4 | Iterator iterator = collection.iterator(); |
5 | while (iterator.hasNext()){ |
6 | Object object = iterator.next(); |
7 | //do something to object; |
8 | } |
泛型(Generic)
The Collection interface can be generified like this:
Collection<String> stringCollection = new HashSet<String>();
List
是一个接口,为了使用它,你必须实例化一个具体的实现,
Collection接口的所有方法在List接口里也适用
,你可以在下列List的实现中选择:
- java.util.ArrayList
- java.util.LinkedList
- java.util.Vector
- java.util.Stack
运行结果:public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> listA = new ArrayList<String>();
//尾部追加元素
listA.add("element 0");
listA.add("element 1");
listA.add("element 2");
//头部插入元素
listA.add(0, "element");
//追加指定collection多个元素到尾部
listA.addAll(new ArrayList());
//打印长度
System.out.println(listA.size());
// 如果列表包含指定的元素,则返回true
listA.contains("test");
//移除元素
listA.remove(0);
listA.remove("element 1");
//获取指定位置元素
listA.get(0);
// 用指定元素替换列表中指定位置的元素
listA.set(0, "set");
// 返回列表中首次出现指定元素的索引,如果列表不包含此元素,则返回 -1
listA.indexOf("lwc");
//access via new for-loop
for(Object object : listA) {
String element = (String) object;
System.out.println(element);
}
//清空
listA.clear();
System.out.println(listA.size());
}
ArrayList对随机访问性能很好,但进行大量插入,删除操作,性能很差, 因为操作之后后续元素需要移动
LinkedList功能与ArrayList,Vector相同,内部是依赖双链表实现的, 因此有很好的插入和删除性能,但随机访问元素的性能很差。 LinkedList底层Entry结构
Entry previous;
Object element;
Entry next;
}
其中element就是我们添加的元素,最后将生成的Entry对象加入到链表中 。
使用场景:插入和删除操作时,采用LinkedList好,搜索时,采用ArrayList好 。
set是Collection的子接口,不包含重复元素,最多包含一个null,元素没有顺序 。实现类如下:
- java.util.EnumSet
- java.util.HashSet
- java.util.LinkedHashSet
- java.util.TreeSet
SortedSet接口
保证迭代器按照元素递增顺序遍历的集合,可以按照元素的自然顺序进行排序
常用方法Object first()
返回此有序集合中当前第一个(最小的)元素
Object last()
返回此有序集合中最后一个(最大的)元素
SortedSet headSet(Object toElement)
返回此有序集合的部分视图,其元素严格小于toElement
SortedSet tailSet(Object fromElement)
返回此有序集合的部分视图,其元素大于或等于fromElement
SortedSet subSet(Object fromElement,Object toElement)
返回此有序集合的部分视图,元素范围从fromElement(包括)到toElement(不包括)
Comparator comparator()
返回与此有序集合关联的比较器,如果使用元素的自然顺序,则返回 null
TreeSet
TreeSet底层是使用TreeMap实现的
构造方法
public TreeSet()
public TreeSet(SortedSet s)
public TreeSet(int initialCapacity)
public TreeSet(Comparator<? super E>)
public TreeSet(Collection c)
因为TreeSet是带排序的, 所以想要为TreeSet增加自定义类型,必须指定排序规则。举例:
Comparator comparator = new MyComparator(); SortedSet setB = new TreeSet(comparator);
- java.util.HashMap
- java.util.Hashtable
- java.util.EnumMap
- java.util.IdentityHashMap
- java.util.LinkedHashMap
- java.util.Properties
- java.util.TreeMap
- java.util.WeakHashMap
![java集合梳理 - bohu83 - bohu83的博客 java集合梳理 - bohu83 - bohu83的博客](http://img1.ph.126.net/eVy3k9x7KYo8_mKIUcRf3w==/1995657584978895370.png)
![java集合梳理 - bohu83 - bohu83的博客 java集合梳理 - bohu83 - bohu83的博客](http://img0.ph.126.net/-RqL1NCT-iyaMvS2V0XKeg==/6598108805205325116.png)
remove
element
offer
poll
peek
put
take
package com.cplatform.sampling.util;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ArrayBQTest {
// 创建等待队列
BlockingQueue bqueue = new ArrayBlockingQueue(20);
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
ArrayBQTest test =new ArrayBQTest();
// TODO Auto-generated method stubs
ArrayBlockingQueue queue = new ArrayBlockingQueue(2);
Thread pthread = new Thread(test.new producerThread(queue));
pthread.start();
Thread c1thread = new Thread(test.new ConsumerThread(queue));
Thread c2thread = new Thread(test.new ConsumerThread(queue));
c1thread.start();
c2thread.start();
Thread.sleep(5000);
System.out.println("****p done****");
pthread.stop();
Thread.sleep(4000);
c1thread.stop();
c2thread.stop();
System.out.println("****over****");
}
class producerThread implements Runnable {
private ArrayBlockingQueue queue;
public producerThread(ArrayBlockingQueue queue){
this.queue =queue;
}
public void run() {
while(true){
try {
String temp = System.currentTimeMillis()+"";
queue.put(temp);
Thread.sleep(1*1000);
System.out.println(Thread.currentThread().getName() + "正在生产。。。"+temp);
} catch (InterruptedException e) {
}
}
}
}
class ConsumerThread implements Runnable {
private ArrayBlockingQueue queue;
public ConsumerThread(ArrayBlockingQueue queue){
this.queue =queue;
}
public void run() {
while(true){
try {
String res=(String) queue.poll();
Thread.sleep(2*1000);
System.out.println(Thread.currentThread().getName() + "正在消费。。。"+res);
} catch (InterruptedException e) {
}
}
}
}
}
![java集合梳理 - bohu83 - bohu83的博客 java集合梳理 - bohu83 - bohu83的博客](http://img1.ph.126.net/z4CmitWtfbApqgKrq7StEg==/6631431704053506292.jpg)