Collection集合

(1)集合的由来?

我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储。而要想存储多个对象,就不能是一个基本的变量,而应该是一个容器类型的变量,在我们目前所学过的知识里面,有哪些是容器类型的呢?数组和StringBuffer。但是呢?StringBuffer的结果是一个字符串,不一定满足我们的要求,所以我们只能选择数组,这就是对象数组。而对象数组又不能适应变化的需求,因为数组的长度是固定的,这个时候,为了适应变化的需求,Java就提供了集合类供我们使用。

(2)集合和数组的区别?

a.长度区别:

数组长度固定
集合长度可变

b.内容不同:

数组存储的是同一种类型的元素
集合可以存储不同类型的元素

c.元素的数据类型问题:

数组可以存储基本数据类型,也可以存储引用类型
集合只能存储对象。

(3)集合的继承体系结构?

由于需求不同,java就提供了不同的集合类。而这多个集合的数据结构不现。但是它们都是要提供存储和遍历功能的,我们把它们的共性不断的向上提取,最终就形成了集合的继承体系结构。
Collection

  • |–List
    • |–ArrayList
    • |–Vector
    • |–LinkedList
  • |–Set
    • |–HashSet
    • |–TreeSet

(4)Collection的功能

1:添加

boolean add(Object obj):添加一个元素
boolean addAll(Collection c):添加一个集合的元素

2:删除

void clear():移除所有元素
boolean remove(Object o):移除一个元素
boolean removeAll(Collection c):移除一个集合的元素

3:判断

boolean contains(Object o):判断集合中是否包含指定的元素
boolean containsAll(Collection c):包含指定的集合元素
boolean isEmpty():是否为空

4:获取

Iterator iterator()

5:长度

int size():元素的个数

面试题:数组有没有length()方法?字符串有没有length()?集合有length()?

6:交集

boolean retainAll(Collection c):两个集合都有的元素

public class Test {
    public static void main(String[] args) {
        //创建集合对象
        Collection c = new ArrayList();
//      System.out.println("add:" + c.add("qiwei"));
        //添加一个元素
        c.add("abc1");
        c.add("abc2");
        c.add("abc3");
        c.add("abc4");

        Collection c2 = new ArrayList();
//      c2.add("abc4");
        c2.add("abc5");
        c2.add("abc6");
        c2.add("abc7");
        c2.add("abc8");
        c2.add("abc9");

        //移除所有
//      c.clear();
        //移除一个元素
//      System.out.println("remove:" + c.remove("qi"));
//      System.out.println("remove:" + c.remove("qieee"));

        //判断集合中是否包含指定的元素
//      System.out.println("contains:" + c.contains("qi"));
//      System.out.println("contains:" + c.contains("qii"));

        //判断集合是否为空
//      System.out.println("isEmpty:" + c.isEmpty());

        //元素的个数
//      System.out.println("size:" + c.size());

        //添加一个集合的元素
//      System.out.println("addAll:" + c.addAll(c2)); 

        //移除一个集合的元素
        //只要有元素删除就返回true
//      System.out.println("removeAll:" + c.removeAll(c2));
        //是否包含指定的集合元素
        //包含所有的元素才叫包含。
//      System.out.println("containsAll:" + c.contains(c2));

        //两个集合都有的元素
        //假设两个集合a,b
        //a对b做交集,最终的结果保存在a中,b不变
//      返回值表示的是a是否发生改变。
        System.out.println("retainAll: " + c.retainAll(c2));

        System.out.println("c:" + c);
        System.out.println("c2:" + c2);
    }
}

(5)Collection集合的遍历

a:把集合转数组

import java.util.ArrayList;
import java.util.Collection;

/*
 * 集合的遍历,
 * Object[] toArray():把集合转成数组,可以实现集合的遍历
 */
public class TestCollection {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        //添加元素
        c.add("qi");//Object obj = "qi";向上
        c.add("wei");
        c.add("java");
        //遍历
        //转成数组,可以实现遍历
        Object[] objs = c.toArray();

        for(int x = 0; x < objs.length; x++) {
//          System.out.println(objs[x]);

            //向下转型
            String s = (String)objs[x];
            System.out.println(s + "---" + s.length());
        }
        System.out.println("c" + c);
    }
}

b:迭代器(集合专用方式)

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class TestIterator {

    /*
     *  Iterator iterator():迭代器,集合的专用遍历方式。 
     *      a:Object next(): 获取元素,并移动到一个位置;
     *          java.util.NoSuchElementException
     *      b:boolean hasNext():如果仍有元素可以迭代,则返回true.
     *  
     */
    public static void main(String[] args) {
        //创建集合对象
        Collection c = new ArrayList();

        //创建并添加元素
        c.add("qi");
        c.add("wei");
        c.add("java");

        //迭代器
        //实现返回的肯定是子类对象,这里是多态
        Iterator it = c.iterator();

        //最终版代码
        while(it.hasNext()) {
            String s = (String)it.next();
            System.out.println(s);
        }   
    }
}

(6)迭代器

  • a:是集合的获取元素的方式。
  • b:是依赖于集合而存在的。
  • c:迭代器的原理和源码

1:为什么定义为了一个接口而不是实现类?
2:看了看迭代器的内部类实现。

(7)Collection集合的案例

集合的操作步骤:
1、创建集合对象
2、创建元素对象
3、把元素添加到集合
4、遍历集合
a:存储字符串并遍历

class CollectionDemo {
    public static void main(String[] args) {
        Collection c = new ArrayList();

        c.add("qiwei");
        c.add("java");

        Iterator it = c.iterator();
        while (it.hasNext()) {
            String s = (String) it.next();
            System.out.println(s);
        }
    }
}

b:存储自定义对象并遍历

class Student{
        private String name;
        private int age;
        public Student() {
            this.name = "qiwei";
            this.age = 22;
        }

        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public void setName(String name) {
            this.name = name;
        }
        public String getName() {
            return this.name;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public int getAge() {
            return this.age;
        }

        public String toString() {
            return getName() + "---" + getAge();
        }
    }

    public class Test {
        public static void main(String[] args) {
            Collection c = new ArrayList();

            Studnet s1 = new Studnet("qi", 22);
            Studnet s2 = new Studnet("wei", 22);

            c.add(s1);
            c.add(s2);

            Iterator it = c.iterator();
            while(it.hasNext()) {
                Student s = (Studnet)it.next();
                System.out.println(s);
            }
        }
    }

你可能感兴趣的:(Java,基础探索,Android,基础开发)