java基础--32.集合框架 Collection

来源:互联网 发布:育碧优化好ea不坑钱 编辑:程序博客网 时间:2024/05/21 03:18

1.集合

先来讲一讲对象数组 数组可以存储基本数据类型,也可以存储引用类型。它存储 引用类型的时候,数组就叫做对象数组

集合的由来:java中存储对象数据中有数组和StringBuffer,但是使用数组存储对象的缺陷是长度固定,所以不适合变化的需求,于是,java及提供了集合供我们使用

1.1 集合与数组的区别:

A 长度:
数组是固定长度,集合是可变长度

B.内容区别
数组可以存储基本类型和引用类型,而集合只能存储引用类型

C.元素内容
数组只能存储同一种类型,集合可以存储不同的类型(但通常只用于存储一种类型)

1.2 集合类的继承结构:

这里写图片描述

Collection接口的功能概述:

Collection:是集合的顶层接口,它的子体系有重复的,有唯一的,有有序的,有无序的。(后面会慢慢的讲解)

1:添加功能

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

2:删除功能

        void clear():移除所有元素        boolean remove(Object o):移除一个元素        boolean removeAll(Collection c):移除一个集合的元素(是一个还是所有),只要有一个元素被移除了,就返回true

3:判断功能

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

4:遍历功能

        Iterator<E> iterator()(重点)

5:长度获取功能

        int size():元素的个数        面试题:数组有没有length()方法呢?字符串有没有length()方法呢?集合有没有length()方法呢?

6:交集功能

        boolean retainAll(Collection c):两个集合都有的元素?思考元素去哪了,返回的boolean又是什么意思呢?
    假设有两个集合A,B。    A对B做交集,最终的结果保存在A中,B不变。    返回值表示的是A是否发生过改变。

7:把集合转换为对象数组

Object[] toArray()

2.集合List

ArrayList

底层数据结构是**数组**,查询快,增删慢。线程**不安全**,效率高。

Vector

底层数据结构是**数组**,查询快,增删慢。线程**安全**,效率低。

LinkedList

底层数据结构是**链表**,查询慢,增删快。线程**不安全**,效率高。

分析:要安全吗?
要:Vector(即使要,也不使用这个,后面再说)
不要:ArrayList或者LinkedList
查询多;ArrayList
增删多:LinkedList

什么都不知道,就用ArrayList。

3.集合Set

(1)Set集合的特点

无序,唯一

(2)HashSet集合(掌握)

A:底层数据结构是哈希表(是一个元素为链表的数组)B:哈希表底层依赖两个方法:hashCode()和equals()  执行顺序:    首先比较哈希值是否相同        相同:继续执行equals()方法            返回true:元素重复了,不添加            返回false:直接把元素添加到集合        不同:就直接把元素添加到集合C:如何保证元素唯一性的呢?    由hashCode()和equals()保证的D:开发的时候,代码非常的简单,自动生成即可。E:HashSet存储字符串并遍历F:HashSet存储自定义对象并遍历(对象的成员变量值相同即为同一个元素)

(3)TreeSet集合

A:底层数据结构是红黑树(是一个自平衡的二叉树)B:保证元素的排序方式    a:自然排序(元素具备比较性)        让元素所属的类实现Comparable接口    b:比较器排序(集合具备比较性)        让集合构造方法接收Comparator的实现类对象C:把我们讲过的代码看一遍即可

(4)案例:

A:获取无重复的随机数B:键盘录入学生按照总分从高到底输出

4.Map(掌握)

(1)将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

(2)Map和Collection的区别?

    A:Map 存储的是键值对形式的元素,键唯一,值可以重复。夫妻对    B:Collection 存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。光棍

(3)Map接口功能概述

1:添加功能

    V put(K key,V value):添加元素。这个其实还有另一个功能?先不告诉你,等会讲        如果键是第一次存储,就直接存储元素,返回null        如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值

2:删除功能

    void clear():移除所有的键值对元素    V remove(Object key):根据键删除键值对元素,并把值返回

3:判断功能

    boolean containsKey(Object key):判断集合是否包含指定的键    boolean containsValue(Object value):判断集合是否包含指定的值    boolean isEmpty():判断集合是否为空

4:获取功能

    Set<Map.Entry<K,V>> entrySet():???    V get(Object key):根据键获取值    Set<K> keySet():获取集合中所有键的集合    Collection<V> values():获取集合中所有值的集合

5:长度功能

    int size():返回集合中的键值对的对数

(4)Map集合的遍历

A:键找值

    a:获取所有键的集合    b:遍历键的集合,得到每一个键    c:根据键到集合中去找值

B:键值对对象找键和值

    a:获取所有的键值对对象的集合    b:遍历键值对对象的集合,获取每一个键值对对象    c:根据键值对对象去获取键和值
方式2 键值对对象找键和值    Set<Map.Entry<String,String>> set2 = hm.entrySet();    for(Map.Entry<String,String> me : set2) {        String key = me.getKey();        String value = me.getValue();        System.out.println(key+"---"+value);    }

集合使用Comparator接口的排序

    TreeSet<Student> s = new TreeSet<Student>(new Comparator<Student>() {            @Override            public int compare(Student s1, Student s2) {                int num0 = s1.getName().length() - s2.getName().length();                int num1 = num0==0?  s1.getName().compareTo(s2.getName()):num0;                int num2 = num1==0?  s1.getAge() - s2.getAge() :num1;                return num2;            }        });

5.Collections工具类的使用方法

(1)是针对集合进行操作的工具类,都是静态的方法
(2)面试题:Collection和Collections的区别
A:Collection 是单列集合的顶层接口,有两个子接口List和Set
B:Collections 是针对集合进行操作的工具类,可以对集合进行排序和查找等
(3)常见的几个小方法:

    A: public static <T> void sort(List<T> list)    B: public static <T> int binarySearch(List<?> list,T key)    C: public static <T> T max(Collection<?> coll)    D: public static void reverse(List<?> list)    E: public static void shuffle(List<?> list)
0 0
原创粉丝点击