Collection接口以及子接口的常用方法

一、Collection的常用方法以及迭代

public class TestCollection {
    public static void main(String[] args) {
        //1.创建Collection相关的对象
        Collection<Integer> c = new ArrayList();

        //2.向集合中存入数据
        c.add(100);
        c.add(200);
        c.add(300);
        c.add(400);
        c.add(500);
        System.out.println(c);//[100, 200, 300, 400, 500]

        //3.测试集合中的常用方法
        //c.clear();//清空集合
        System.out.println(c.hashCode());//打印集合对象的哈希码值
        System.out.println(c.equals(200));//false,集合对象与集合中某一个元素不等
        System.out.println(c);//打印的不是集合对象的地址值,而是集合中的具体元素
        System.out.println(c.contains(200));//true,判断集合当中是否包含200
        System.out.println(c.isEmpty());//false,判断集合是否为空
        System.out.println(c.remove(100));//删除集合中的指定元素100
        System.out.println(c.size());//4,获取集合中元素的个数
        Object[] array = c.toArray();//将集合对象转化为数组
        System.out.println(Arrays.toString(array));//使用数组工具类打印数组

        //4.1测试集合间的操作
        Collection<Integer> c2 = new ArrayList<>();
        c2.add(2);
        c2.add(4);
        c2.add(5);
        System.out.println(c2);//[2, 4, 5]

        //4.2测试多个集合间的操作
        System.out.println(c.addAll(c2));//将c2集合的所有元素添加到c集合中
        System.out.println(c.containsAll(c2));//判断c集合中是否包含c2集合的所有元素
        System.out.println(c.removeAll(c2));//删除c集合中属于c2的所有元素
        System.out.println(c.retainAll(c2));//保留c集合中属于c和c2集合的公共元素,取交集

        //使用迭代器迭代c2集合
        //1.获取迭代器
        Iterator<Integer> it = c2.iterator();
        //2.判断集合中是否有下一个元素可以迭代
        while (it.hasNext()){
            //3.获取本轮循环迭代到的集合元素
            System.out.println(it.next());
        
    }
}

二、List接口常用方法以及迭代

1、List接口

List接口是有下标的有序的可以存放重复元素的集合。

        //测试单个集合的操作
        System.out.println(list.contains());//包判断是否包含该元素
        System.out.println(list.isEmpty());//判断集合是否为空
        System.out.println(list.remove());//删除指定元素
        System.out.println(list.size());//获取集合中元素的个数
        System.out.println(Arrays.toString(list.toArray()));//集合转数组并打印

        //测试集合间的操作
        List<String> list2 = new ArrayList<>();
        list2.add("1");
        list2.add("2");
        list2.add("3");
        list2.add("4");
        System.out.println(list2);
        System.out.println(list.addAll(list2));//将集合list2添加到list集合中
        System.out.println(list.containsAll(list2));//判断list中是否包含list2
        System.out.println(list.removeAll(list2));//删除list中list2的元素
        System.out.println(list2.retainAll(list));//保留list2中的所有元素

        //测试list集合的独有方法
        list.add();//根据索引添加元素,可重复添加
        System.out.println(list.indexOf());//判断元素第一次出现的索引
        System.out.println(list.lastIndexOf());//判断元素最后一次出现的索引
        System.out.println(list.remove());//根据下标删除元素,并把被删除的元素返回
        System.out.println(list.get());//根据索引获取对应的元素
        System.out.println(list.set());//根据索引修改指定位置的元素
        list.addAll(list2);
        list.addAll(1,list2);//在集合list中指定索引添加list2中的元素


        /*集合的迭代方式
        * 1.for循环
        * 2.foreach循环
        * 3.iterator迭代器
        * 4.listIterator*/
        //方式一:因为List集合是有序的,元素是有下标的,所以可以根据下标进行遍历
        for (int i = 0; i < list.size(); i++) {
            //根据本轮循环到的下标值,获取集合中对应下标处的元素
            System.out.println(list.get(i));
        }

        //方式二:因为普通for循环写法复杂,效率还低,所以使用高效for循环
        for (String e : list){
            System.out.println(e);
        }

        //方式三:使用的是从父接口Collection处继承过来的迭代器iterator
        Iterator<String> it = list.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }

        //方式四:使用List接口特有的迭代器ListIterator
        /*listIterator是List接口特有的迭代器
        * ListIterator<E>--子接口--继承了父类的功能*/
        ListIterator<String> it2 = list.listIterator();
        while (it2.hasNext()){
            System.out.println(it2.next());
        }

2、ArrayList实现类

ArrayList的特点:
         *      1.List接口的实现类
         *      2.底层的数据结构是数组,内存空间是连续的
         *      3.元素有下标,有序,允许存放重复的元素
         *      4.通常可以根据下标进行操作
         *      5.增删操作比较慢,查询操作比较快[数据量比较大时]

/*底层会自动帮我们创建数组用于存放对象,并且数组的初始容量是10*/
        //1.创建对应的集合对象
        ArrayList<Integer> list = new ArrayList<>();

        //2.向集合添加元素
        //[100, 200, 300, 400, 400, 300]

        //3.测试常用方法
        System.out.println(list.contains());//是否包含该集合类型的元素
        System.out.println(list.get());//获取集合中下标0处的元素
        System.out.println(list.indexOf();//获取元素第1次出现的索引
        System.out.println(list.lastIndexOf());//获取元素最后一次出现的索引
        System.out.println(list.remove());//根据下标删除集合中的指定元素

        /* List中有两个重载的remove(),如果直接传入数字300
           会直接匹配int类型的index索引方法,而不会认为这是一个Integer类型的数据
           所以,如果想要根据指定元素删除数据,需要把int类型的数据手动装箱成Integer*/
        System.out.println(list.remove(Integer.valueOf(300)));
        System.out.println(list.size());//获取集合的元素个数
        list.set(2,777);//修改下标2处的元素,值为777

        /**
         * ArrayList集合的迭代方式
         */
        //1.使用for循环迭代集合
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

        //2.使用高效for循环迭代集合
        for(Integer e : list){
            System.out.println(e);
        }

        //3.使用iterator迭代器
        Iterator<Integer> it = list.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }

        //4.使用ListIterator迭代器
        ListIterator<Integer> it2 = list.listIterator();
        while (it2.hasNext()){
            System.out.println(it2.next());
        }

3、LinkedList实现类

1)LinkedList的内存地址不连续,是靠着节点之间的地址连接起来的

2)LinkedList也是有下标的,从0开始,也就是说头节点是0号字节

3)普通节点保存的是上一个节点的地址与下一个节点的地址

4)头节点保存的只有下一个节点的地址,尾节点保存的只有上一个节点的地址

LinkedList的特点:
         *      1.List接口的实现类
         *      2.底层的数据结构是链表,内存空间是不连续的
         *      3.元素有下标,有序,允许存放重复的元素
         *      4.通常进行首尾节点的操作比较多
         *      5.增删操作比较快,查询操作比较慢[数据量比较大时

        注意:LinkedList的查询操作也不是都慢,首尾操作还是比较快的

        //1.创建集合对象
        LinkedList<String> list = new LinkedList<>();
        //2.添加数据
        //[孙悟空, 猪八戒, 唐三藏, 沙师弟, 白龙马]

        //3.测试LinkedList独有的方法
        list.addFirst("蜘蛛精");//向链表添加首元素
        list.addLast("玉兔精");//向链表添加尾元素
        System.out.println(list);
        System.out.println(list.getFirst());//获取链表中的首元素
        System.out.println(list.getLast());//获取链表中的尾元素
        System.out.println(list.removeFirst());//删除链表中的首元素并返回被删除的元素
        System.out.println(list.removeLast());//删除链表中的尾元素并返回被删除的元素

        //4.其他测试
        LinkedList<String> list2 = new LinkedList<>();
        //[水浒传, 三国演义, 西游记, 石头记]

        System.out.println(list2.element());//获取首元素

        /*别名:查询系列*/
        System.out.println(list2.peek());//获取首元素
        System.out.println(list2.peekFirst());//获取首元素
        System.out.println(list2.peekLast());//获取尾元素

        /*别名:新增系列*/
        System.out.println(list2.offer("斗罗大陆"));//添加尾元素
        System.out.println(list2.offerFirst("三体"));//添加首元素
        System.out.println(list2.offerLast("娃"));//添加尾元素

        /*别名:移除系列*/
        System.out.println(list2.poll());//删除首元素
        System.out.println(list2.pollFirst());//删除首元素
        System.out.println(list2.pollLast());//删除尾元素
    }

三、Set接口的迭代

1、Set集合的特点

set集合中的元素都是没有顺序的

set集合中的元素不能重复

set集合允许存null值,但是最多存一个

如果set集合中存放的是我们自定义的类型,需要给自定义类中添加重写equals()与hashCode()

set集合才会实现按照类型+属性+属性值来去重

否则会认为其是两个不同的对象,因为地址值不同,不会去重

2、Set集合的迭代

Iterator<String> it = set.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值