一、集合的概念
何為集合,集合就是相當於一個對象的容器。集合是類似數組的一個作用。既然有了數組,為何還要有集合呢,由於數組對象一旦創建,其大小便不可以更改,我們只能往數組中存放創建時數量的對象。而集合中的長度卻是動態可變化的,我們可以往集合中添加任意數量的對象。並且我們可以通過集合更方便地實現數據結構如隊列,棧等等。在集合中我們更可以定義自己想要的操作。
二、集合的定義
java中集合類的基本接口是Collection,實現集合接口,需要實現集合接口中的一下方法:

1 class ExtendCollection<T> implements Collection<T>{ 2 3 public void forEach(Consumer<? super T> action) { 4 // TODO Auto-generated method stub 5 6 } 7 8 public int size() { 9 // TODO Auto-generated method stub 10 return 0; 11 } 12 13 public boolean isEmpty() { 14 // TODO Auto-generated method stub 15 return false; 16 } 17 18 public boolean contains(Object o) { 19 // TODO Auto-generated method stub 20 return false; 21 } 22 23 public Iterator<T> iterator() { 24 // TODO Auto-generated method stub 25 return null; 26 } 27 28 public Object[] toArray() { 29 // TODO Auto-generated method stub 30 return null; 31 } 32 33 public <T> T[] toArray(T[] a) { 34 // TODO Auto-generated method stub 35 return null; 36 } 37 38 public boolean add(T e) { 39 // TODO Auto-generated method stub 40 return false; 41 } 42 43 public boolean remove(Object o) { 44 // TODO Auto-generated method stub 45 return false; 46 } 47 48 public boolean containsAll(Collection<?> c) { 49 // TODO Auto-generated method stub 50 return false; 51 } 52 53 public boolean addAll(Collection<? extends T> c) { 54 // TODO Auto-generated method stub 55 return false; 56 } 57 58 public boolean removeAll(Collection<?> c) { 59 // TODO Auto-generated method stub 60 return false; 61 } 62 63 public boolean removeIf(Predicate<? super T> filter) { 64 // TODO Auto-generated method stub 65 return false; 66 } 67 68 public boolean retainAll(Collection<?> c) { 69 // TODO Auto-generated method stub 70 return false; 71 } 72 73 public void clear() { 74 // TODO Auto-generated method stub 75 76 } 77 78 79 public Spliterator<T> spliterator() { 80 // TODO Auto-generated method stub 81 return null; 82 } 83 84 public Stream<T> stream() { 85 // TODO Auto-generated method stub 86 return null; 87 } 88 89 90 public Stream<T> parallelStream() { 91 // TODO Auto-generated method stub 92 return null; 93 }
在Collection接口中使用了Iterator接口,Iterator接口的內部組成如下:
public interface Iterator<E>{
void remove(); E next(); boolean hasNext(); }
通過實現我們的Iterator,Iterator就是一個迭代器,通過以下代碼我們就可以循環遍歷集合中的每一個元素:
List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); // 獲取迭代器 Iterator iterator = list.iterator(); // 判斷集合中是否存在下一個元素 while(iterator.hasNext()){ // 獲取集合中的元素 String str = iterator.next().toString(); System.out.println(str); }
另外我們還可以使用for each去循環遍歷集合中的元素:這種方式在實際上原理就是使用了上面的代碼進行遍歷。
for(String item: list){ System.out.println(item); }
for each關鍵字用於實現Iterable接口的對象,Iterable接口對象中只有一個方法,即獲取迭代器的方法
public interface Iterable<E>{ Iterator<E> iterator(); }
java中的集合框架接口
java中的集合框架類
三、視圖的概念
java中的視圖,可以說其實就是一個具有限制的集合對象,只不過這里的不是集合對象,而是一個視圖對象。例如:這里有一個Test類
Test[] tests = new Test[10]; List<Test> testList = Arrays.asList(tests);
這里的testList是一個視圖對象,具有訪問數組元素set,get的方法。但是如果調用改變數組的方法就會拋出異常。所以可以說視圖對象可以說是具有限制的集合對象。
利用java類庫中的方法我們可以獲得不可更改視圖,子視圖等等,這些視圖對於原對象具有不同的操作權限。
四、java中集合和數組的轉換
將數組轉換成集合
String[] values = {"my","a"}; HashSet<String> test = new HashSet<String>(Arrays.asList(values));
將集合轉換成數組
String[] values = test.toArray(new String[0]);