java中的集合和視圖

java中的集合和視圖

一、集合的概念

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

二、集合的定義

  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]);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章