十一、集合

集合

集合:集合就是个容器,用来装东西

集合容器的特点

1.集合容器的长度是可以变化的
2.集合容器只能存储引用数据类型
3.一个集合容器中可以存储不同引用数据类型的数据

集合容器和数组容器的区别

1.集合容器的长度是可以变化的,数组容器一旦初始化长度就不能改变了
2.集合容器只能存储引用数据类型,数组容器既可以存储基本数据类型,也可以存储引用数据类型
3.一个集合容器中可以存储不同引用数据类型的数据,一个数组容器中只能存储同一种数据类型的数据

集合体系结构

Collection 单列集合的顶层接口
    --List 子接口
        --ArrayList  实现类 
        --LinkedList 实现类
        --Vector     实现类

    --Set  子接口
        --HashSet    实现类
        --TreeSet    实现类
        --LinkedHashSet 实现类

Map  双列集合的顶层接口
        -- HashMap 实现类
        -- TreeMap 实现类
        -- LinkedHashMap 实现类
        -- Hashtable 实现类
            -- Properties 实现类

Collection接口

常见的方法

boolean add(Object e)://添加元素
    boolean addAll(Collection c)://添加集合
    boolean remove(Object o)://删除元素
    boolean removeIf(Predicate filter)://按照条件删除元素
    void clear()://清空
    int size()://集合容器长度
    //数组长度:length
    //字符串长度:lenght()
    //集合长度:size()
    boolean contains(Object o)://判断集合容器中是否包含指定元素
    boolean isEmpty()://判断集合容器是否为空的

    Object[] toArray()://将集合容器转换成数组容器
    Iterator<E> iterator()://获取迭代器对象

Collection集合的遍历

//方式一:转数组遍历
Object[] objs = c.toArray();
for(int i = 0; i < objs.length; i++) {
    System.out.println(objs[i]);
}

//方式二:迭代器遍历
Iterator it = c.iterator();
while(it.hasNext()) {
    //在使用迭代器时不可以使用集合自带的方法对集合内容进行修改
    //否则会发生并发修改异常
    Object obj = it.next();
    System.out.println(obj);
}

//方式三:增强for循环(foreach)遍历

增强for循环的格式:
    for(数据类型 变量名(元素名) : 要遍历的容器的名字) {

        }

        for(Object obj : c) {
    System.out.println(obj);
}

//注意:增强for循环,底层使用的还是迭代器

List接口

List集合的特点
1.有序的(存入的顺序和取出的顺序是一样的)
2.元素可以重复的
3.有索引的

常见的成员方法
//和Collection是一样
void add(int index, Object element)://在指定的索引处添加元素
    Object get(int index)://获取指定索引处的元素
    Object remove(int index)://删除指定索引处的元素
    Object set(int index, Object element)://修改指定索引处的元素,返回被修改的数据
List集合的遍历
//方式一:转数组
Object[] objs = list.toArray();
for (int i = 0; i < objs.length; i++) {
    System.out.println(objs[i]);
}

//方式二:迭代器遍历
Iterator it = list.iterator();
while(it.hasNext()) {
    Object obj = it.next();
    System.out.println(obj);
}

//方式三:增强for
for(Object obj : list) {
    System.out.println(obj);
}

//方式四:普通for
for(int i = 0; i < list.size(); i++) {
    Object obj = list.get(i);
    System.out.println(obj);
}
ArrayList实现类

ArrayList集合的特点1.有序的(存入的顺序和取出的顺序是一样的)2.元素可以重复的3.有索引的
底层数据结构:数组数据结构

常见的构造方法?
public ArrayList();
常见的成员方法

和List一样的

LinkedList实现类

LinkedList集合的特点?1.有序的(存入的顺序和取出的顺序是一样的)2.元素可以重复的3.有索引的
底层数据结构:双向链表数据结构

常见的构造方法
    public LinkedList()
常见的成员方法
//和List一样的
public void addFirst(Object e)://将元素添加到第一个位置
    public void addLast(Object e)://将元素添加到最后一个位置
    public Object getFirst()://获取第一个位置的元素
    public Object getLast()://获取最后一个位置的元素
    public Object removeFirst()://删除第一个位置的元素
    public Object removeLast()://删除最后一个位置的元素

Set接口

Set集合的特点
1.不保证顺序(存入的顺序和取出的顺序是不一样的)
2.元素唯一
3.无索引
常见的成员方法:和Collection中的方法是一样

TreeSet实现类

TreeSet集合的特点
1.不保证顺序(存入的顺序和取出的顺序是不一样的)
2.元素唯一
3.无索引
4.可以排序的(由小到大)
TreeSet的数据结构:树型结构中红黑树
常见的成员方法:和Set中的方法是一样

存储自定义对象

如果我们想要使用TreeSet来存储自定义对象的话,要满足两个条件之一才可以正常运行条件一:自然排序Comparable条件二:比较器Comparator

实现自然排序
1.自定义类,实现Comparable接口
2.重写抽象方法compareTo()
3.在compareTo()方法中写比较规
    返回值为0:集合中的元素只有一个
    返回值为正数:集合中的元素是正序
    返回值为负数:集合中的元素是倒数
实现比较器
1.自定义类
2.创建TreeSet集合对象,在构造方法中传递Comparator的对象
3.重写compare()方法
4.在compare()中写比较规则
    返回值为0:集合中的元素只有一个
    返回值为正数:集合中的元素是正序
    返回值为负数:集合中的元素是倒数
HashSet实现类

特点:1.无序的2.元素唯一的3.无索引
数据结构:哈希表
常见的方法:和Set方法是一样的

LinkedHashSet实现类

特点:
1.有序的
2.元素唯一的
3.无索引

MAP接口

特点:
1.无序的
2.无索引
3.元素唯一的 键唯一 值可以重复
4.双列的

常见的方法

V put(K key,V value):
    //1.添加元素
    //2.修改,返回被修改前的值s
    V remove(Object key)://根据键来删除元素,返回被删除的元素的值
    int size()://获取集合容器的长度
    void clear()://清空
    V get(Object key)://根据键获取值
    boolean containsKey(Object key)://判断是否包含指定的键的元素
    boolean containsValue(Object value)://判断是否包含指定的值的元素
    Set<K> keySet()://将map集合中的所有的键获取到,扔到Set集合中
    Collection<V> values()://将map集合中的所有的值后去到,扔到Collection集合
    Set<Map.Entry<K,V>> entrySet()://将键值对对象扔到Set集合中

HashMap实现类

特点:
1.无序的
2.无索引
3.元素唯一的键唯一值可以重复
4.双列的
数据结构:哈希表,HashSet底层使用的就是HashMap
常见的方法:和Map集合中的方法是一样的

TreeMap实现类

特点:
1.无序的
2.无索引
3.元素唯一的键唯一值可以重复
4.双列的
5.可以排序的(根据键来排序)
数据结构:红黑树,TreeSet底层使用的就是TreehMap
常见的方法:和Map集合中的方法是一样的

posted @ 2023-05-19 18:24  Uinie  阅读(48)  评论(0)    收藏  举报