Java集合

1 篇文章 0 订阅

容器

容器|集合

Collection接口
Collection 接口是 List、Set 和 Queue 接口的父接口,通常情况下不被直接使用。Collection 接口定义了一些通用的方法,通过这些方法可以实现对集合的基本操作。定义的方法既可用于操作 Set 集合,也可用于操作 List 和 Queue 集合。
Collection:集合层次结构中的根接口。 集合表示一组对象,称为其元素 。
常用方法:

 //常用方法
        //boolean add(E e) 确保此集合包含指定的元素(可选操作)。
        //boolean addAll(Collection<? extends E> c) 将指定集合中的所有元素添加到此集合中(可选操作)。
        col.add("abc");
        col.add(false);
        col.add(100);
        col2.add("aaa");
        col2.add("bbb");
        System.out.println(col);
        col.addAll(col2);
        System.out.println(col);

        //boolean contains(Object o) 如果此collection包含指定的元素,则返回 true 。
        //boolean containsAll(Collection<?> c) 如果此集合包含指定集合中的所有元素,则返回 true 。
        System.out.println(col.contains(100));
        col2.add("ccc");
        System.out.println(col.containsAll(col2));

        //boolean remove(Object o) 从此集合中移除指定元素的单个实例(如果存在)(可选操作)。
        //boolean removeAll(Collection<?> c) 删除此集合的所有元素,这些元素也包含在指定的集合中(可选操作)。
        System.out.println(col.remove(100));
        System.out.println(col);
        //System.out.println(col.removeAll(col2));
        //System.out.println(col);

        //boolean retainAll(Collection<?> c) 仅保留此集合中包含在指定集合中的元素(可选操作)。
        System.out.println(col.retainAll(col2));
        System.out.println(col);
        System.out.println(col2);

        //Object[] toArray() 返回包含此集合中所有元素的数组。
        System.out.println(Arrays.toString(col.toArray()));

遍历方法

public class Class002_Each {
    public static void main(String[] args) {
        Collection col = new ArrayList();
        col.add("aaa");
        col.add("bbb");
        col.add("ccc");
        col.add("ddd");

        //1.增强for
        for(Object s:col){
            System.out.println(s);
        }

        //2.迭代器
        //1)获取迭代器对象
        Iterator it = col.iterator();
        //2)判断是否存在下一个数据
        while(it.hasNext()){
            //3)获取下一个数据
            System.out.println(it.next());
        }

    }
}

List接口

有序可重复
新增 : 一些根据索引操作的方法
添加null元素
泛型: 规定集合存储数据的类型 | 规定数据的类型
表示 : <数据类型> 数据类型只能为引用数据类型
位置 : 定义在数据类型的后面
优点 : 帮助增强程序的稳定性与可读性
有序: 存放的顺序与内部真实存储的顺序相同
注意: 存储的数据为整数的时候,默认以索引优先

List<String> list = new ArrayList();
        //List<Integer> list2 = new ArrayList();

        list.add(null);
        list.add(null);
        list.add("abc");
        list.add("cde");
        list.add("mnb");

        System.out.println(list);

        //新增方法
        //void add(int index, E element) 将指定元素插入此列表中的指定位置(可选操作)。
        list.add(1,"你好");
        System.out.println(list);

        //E get(int index) 返回此列表中指定位置的元素。
        System.out.println(list.get(3));;

        //int indexOf(Object o) 返回此列表中第一次出现的指定元素的索引,如果此列表不包含该元素,则返回-1。
        //int lastIndexOf(Object o) 返回此列表中指定元素最后一次出现的索引,如果此列表不包含该元素,则返回-1。
        System.out.println(list.lastIndexOf(null));

        //static <E> List<E> of(E... elements) 返回包含任意数量元素的不可修改列表。
        List<Integer> list1 = List.of(1,2,3,4,5);
        System.out.println(list1);

        //E remove(int index) 删除此列表中指定位置的元素(可选操作)。
        System.out.println(list.remove(2));
        System.out.println(list);

        //E set(int index, E element) 用指定的元素替换此列表中指定位置的元素(可选操作)。
        System.out.println(list.set(4,"nb"));
        System.out.println(list);

        //List<E> subList(int fromIndex, int toIndex) 返回指定的 fromIndex (包含)和 toIndex (不包括)之间的此列表部分的视图。
        System.out.println(list.subList(1,3));
        System.out.println(list);

        //Object[] toArray()
        System.out.println(Arrays.toString(list.toArray()));

List集合遍历方式:

    1.普通for循环
public class Class003_List {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("钢铁侠");
        list.add("美国队长");
        list.add("黑寡妇");
        list.add("灭霸");
        list.add("毒液");
        System.out.println(list);
        //1. contains
       if(list.contains("灭霸")){
            list.add("惊奇队长");
        }
        System.out.println(list);*/
        //2.for
     for(int i=0;i<list.size();i++){
            if("灭霸".equals(list.get(i))){
                list.add("惊奇队长");
            }
        }
        System.out.println(list);
    2.增强for循环
 //3.foreach
        //ConcurrentModificationException 当不允许这样的修改时,检测到对象的并发修改的方法可能抛出此异常。
      for(String str : list){
            if("灭霸".equals(str)){
                list.add("惊奇队长");
            }
        }
        System.out.println(list);
    3.iterator迭代器
//3.迭代器 iterator
        for(Iterator<String> it =  list.iterator();it.hasNext();){
            if("灭霸".equals( it.next())){
                list.add("惊奇队长");
            }
        }
        System.out.println(list);*
    4.listIterator 列表迭代器
//5.列表迭代器
        //1)获取列表迭代器对象
      /*  ListIterator<String> it2 =  list.listIterator();
        //2)判断是否存在下一个|上一个元素
        //正向遍历
        while(it2.hasNext()){
            //3)获取上一个或者下一个元素 | 操作集合
            System.out.println(it2.nextIndex());
            System.out.println(it2.next());
            *//*if("灭霸".equals( it2.next())){
                it2.add("惊奇队长");
            }*//*
        }
        System.out.println(list);*/
        //反向遍历
        ListIterator<String> it3 = list.listIterator(4);
        while(it3.hasPrevious()){
            System.out.println(it3.previousIndex()+"-->"+it3.previous());
        

ArrayList

    底层实现: 可变数组
    特点:
        根据索引做查询效率高
        增删效率低,设计到新数组的创建,数据的拷贝等问题
    应用场景: 大量做查询,少量做增删的时候适合使用ArrayList
    扩容: int newCapacity = oldCapacity + (oldCapacity >> 1); 通过Arrays.copyOf方法实现扩容,每次扩容原容量的1.5倍
        第一次添加数据内部构建数组的初始容量为10
    新增内容: void forEach(Consumer<? super E> action) 对 Iterable每个元素执行给定操作,直到处理 Iterable所有元素或操作引发异常。
    遍历方式:
        1.普通for
        2.增强for
        3.iterator迭代器
        4.listIterator迭代器
public class Class004_ArrayList{
    public static void main(String[] args) {
        //ArrayList() 构造一个初始容量为10的空列表。
        List<String> list = new ArrayList<>();

        //ArrayList(int initialCapacity) 构造具有指定初始容量的空列表。
        //ArrayList(Collection<? extends E> c) 按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。

        //添加
        list.add("haha");
        list.add("hehe");
        System.out.println(list);

        //遍历输出每一个元素
        list.forEach(System.out::println);
    }
}

Vector 向量
有序 可重复
底层结构: 数组
与ArrayList很像
Vector与 ArrayList之间的区别:
1.同步问题
ArrayList 线程不安全|不同步,相对效率高
Vector 线程安全|同步
2.扩容问题
ArrayList 每次扩容原容量的1.5倍,更有利于节约内存
Vector 每次扩容原容量的2倍

注意:
    使用集合存储自定义引用数据类型数据时候,需要重写equals方法,使用indexOf,constains()..,默认使用equals的返回值决定是否存在,包含,相等
        可以实现比较对象的内容,而非地址

LinkedList :

    有序 可重复
    底层结构: 双向链表
    特点:
        根据索引查询效率低
        做增删效率高
    应用场景:
        大量做增删少量做查询的时候适合使用
    新增功能:
        新增了一些可以直接操作头尾的方法
public class Class005_LinkedList {
    public static void main(String[] args) {
        //链表结构
        LinkedList<Double> linked = new LinkedList<>();

        linked.add(1.1);
        linked.add(2.1);
        linked.add(3.1);
        linked.add(4.1);

        System.out.println(linked);

        linked.addFirst(0.1);
        linked.addLast(5.1);
        System.out.println(linked);

        System.out.println(linked.removeFirst());
        System.out.println(linked);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值