zoukankan      html  css  js  c++  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 }
    View Code

       在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]);
  • 相关阅读:
    codevs 2149 矩形周长
    codevs 3044 矩形面积求并
    codevs 1293 送给圣诞夜的极光
    codevs 2806 红与黑
    codevs 1536 海战
    codevs 1262 不要把球传我
    codevs 2606 约数和问题
    BZOJ 2301 problem b
    BZOJ 3994 约数个数和
    codevs 1173 最优贸易
  • 原文地址:https://www.cnblogs.com/huangweikun/p/5107515.html
Copyright © 2011-2022 走看看