Java细节问题归纳与总结(四)

本文介绍了Java集合框架中的List接口及其实现类ArrayList的特点和操作,包括扩容机制、添加、删除和查找元素的方法。接着讨论了Set接口的实现类HashSet和TreeSet,强调了它们在存储和排序上的差异。同时,提到了Map接口和其在存储键值对时的作用。最后,文章涵盖了迭代器在遍历集合中的应用。
摘要由CSDN通过智能技术生成

第1章 集合框架

 三种接口的区别:

  • List接口:元素有放入顺序,元素可重复 。和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。

  • Set接口:元素无放入顺序,元素不可重复,重复元素会覆盖掉。检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。

  • Map接口:Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。所以通过指定的key就可以取出对应的value。Map 没有继承 Collection 接口

第2章 ArrayList类

/**
扩容机制:
 * ArrayList() 空参构造器:默认长度是10(构造一个初始容量为十的空列表。)
 * ArrayList默认扩容机制是原来的1.5倍数
 * ArrayList()创建的是一个空数组,而不是长度为10的数组,只是在第一次添加时会扩容为10
 */
//泛型:泛指的类型
        ArrayList<String> list = new ArrayList<String>();

        //添加数据
        list.add("安琪拉");
        list.add("小乔");
        list.add("王昭君");
        list.add(1,"大乔"); //根据索引插入指定位置
        list.addAll(list);                  //添加一个集合

        //获取数据
        System.out.println(list.get(1));

        //修改数据
        list.set(0,"妲己");

        //删除数据
        list.remove(5);
        list.remove("安琪拉"); //根据数据来删
//        list.removeAll(list);     //删除集合所有元素

        //清空所有数据
//        list.clear();

        //判断集合中是否包含指定数据
        System.out.println(list.contains("妲己"));

        //判断集合是否为空
        System.out.println(list.isEmpty());

        //获取集合中的长度
        System.out.println(list.size());

        //ArrayList转数组
        Object[] array = list.toArray();
        System.out.println(Arrays.toString(array));

        System.out.println(list);
//        list.add(123);

        //遍历1
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

        System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");

        //遍历2
        for (String string:
             list) {
            System.out.println(string);
        }

        System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");

        //遍历3:迭代器
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            String string = iterator.next();
            System.out.println(string);
        }

补充:Vector类

/**
扩容机制:
 * 扩容2倍
 */

 

第3章 LinkedList类

特点:LinkedList集合的元素在内存中并不连续,从图中我们可以发现LinkedList对于添加、删除元素效率比较高,对于查找跟修改效率比较低。

LinkedList<String> list = new LinkedList<>();

        //添加数据
        list.addFirst("123");
        list.addFirst("456");

        //删除数据
//        list.remove();
//        list.removeLast();

        //修改数据
        list.set(0,"666");

        //获取数据
        list.getFirst();
        list.getLast();

        //遍历和ArrayList一样

        System.out.println(list);

 与ArrayList比较:

ArrayList内存空间连续、查询快、添加慢、修改快、删除慢
LinkedList内存空间不连续、查询慢、添加快、修改慢、删除快

第4章 HashSet类(底层是HashMap)

 HashSet<String> hashSet = new HashSet<>();

        //添加
        hashSet.add("666");
        hashSet.add("陈冠希");
        hashSet.add("吴亦凡");
        hashSet.add("666");

        //删除
//        hashSet.remove("666");

        //修改数据(无)

        //获取数据(无)

        //通过遍历获取数据
        //遍历1(foreach底层循环就是迭代器iterator)
//        for (String string:
             hashSet) {
            System.out.println(string);
        }

        //遍历2
        //获取迭代器
        Iterator<String> iterator = hashSet.iterator();
        //后面是否还有数据
        while (iterator.hasNext()){
            String string = iterator.next();    //获取下一条数据
            System.out.println(string);
        }

 补充:

//1。HashSet添加相同数据后,是覆盖还是没添加进去
    // 没添加进去
//2。HashSet是如何判断是同一个对象的
    // equals和hashCode两个方法的结果来判断的

第5章 TreeSet类(底层是TreeMap:红黑树)

/**
 * TreeSet:可排序集合(要求目标具备排序功能)
 */

若要实现排序,可以用比较器(1、实现Comparable接口  2、重写compareTo方法)

TreeSet<User> treeSet = new TreeSet<>();

        User user = new User("zs", 18);
        User user1 = new User("ls", 20);
        User user2 = new User("ww", 16);

        //添加
        treeSet.add(user);
        treeSet.add(user1);
        treeSet.add(user2);
        //删除
//        treeSet.remove(user);

        System.out.println(treeSet);

第6章 迭代器

        ArrayList<String> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add(i + "");
        }

        //使用迭代器
        //获取迭代器对象
//        Iterator<String> iterator = list.iterator();
//        while (iterator.hasNext()){
//            String string = iterator.next();
//            System.out.println(string);
//        }

//        for (Iterator<String> iterator = list.iterator();iterator.hasNext();){
//            String string = iterator.next();
//            System.out.println(string);
//        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值