day12

Collection

/*
    到目前位置,我们学习过哪些可以存储元素的容器:
    1、数组
        优点:不同的数组可以存储不同数据类型的元素
        缺点:长度不可变
    2、StringBuffer|StringBuilder
        优点:长度可以跟随元素的数量而改变
        缺点:里面的元素只有一种字符数据类型

    我们今后会根据元素的是否重复,存储和取出的顺序等来决定我们该使用什么样的容器来进行存储
    根据我现实生活中经验来说,容器应该是丰富多彩的,多种多样的
    java应该要使用若干个不同的类来描述不同的容器,表示不同容器的特点。
    容器应该都有若杠共同的特点,都可以装东西等。
    那么java中提供的这些类中成员应该也会有相同的部分,那我们将其向上提取,由继承或实现来构建关系
    这样我们就可以得到一个继承体系。

    Collection【接口】:
        我们通过帮助文档发现,Collection是一个接口,不能直接new对象
        根据元素是否可以发生重复,继续分类
        - List【接口】元素可以发生重复,且有索引的概念
            ArrayList
        - Set【接口】元素不可以发生重复,没有索引

   借助ArrayList子类对象来使用Collection接口中的方法

   学习java中任意一个集合的步骤:
    1、创建相关集合对象
    2、创建元素对象
    3、将元素添加到集合中
    4、遍历集合

    Collection中的成员方法:
        boolean add(E e)
        boolean remove(Object o)
        void clear()
        boolean contains(Object o)
        boolean isEmpty()
        int size()

//借助ArrayList创建对象来使用Collection接口中的方法
        // 1、创建相关集合对象
        Collection c1 = new ArrayList();

        //boolean add(Object e)
        c1.add(100); //这里涉及到自动装箱 int -> Integer
        c1.add(true);
        c1.add(12.34);
        c1.add(1000L);
        c1.add(100);
        c1.add(12.34);
        // 重写toString()方法的类是ArrayList类的父类的父类中重写的。
        // 底层是使用StringBuilder实现的
 //boolean remove(Object o) 从集合中删除一个元素,只会删除最左边的一个匹配元素
        c1.remove(100);
        System.out.println("c1: " + c1);
        System.out.println("-----------------------------------------");
        //void clear() 清空集合元素
//        c1.clear();
//        System.out.println("c1: " + c1);
        System.out.println("-----------------------------------------");
        //boolean contains(Object o) 判断Collection集合中是否包含某个元素
        System.out.println(c1.contains(12.34));
        System.out.println("-----------------------------------------");
        //boolean isEmpty() 判断Collection集合是否为空
        System.out.println(c1.isEmpty());
        System.out.println("-----------------------------------------");
        //int size() 获取集合的长度【元素的个数】
        System.out.println(c1.size());

        boolean addAll(Collection c)//两个集合合并 去重看具体的实现子类
        boolean removeAll(Collection c)//删除集合中含有另一个集合的元素
        boolean containsAll(Collection c)//集合中是否包含另一个集合的所有元素
        boolean retainAll(Collection c)// 求交集 将结果保存在调用方法的对象集
/*
    如何遍历一个Collection集合
    1、Object[] toArray() 把集合转成数组,可以实现集合的遍历
 */
public class CollectionDemo3 {
    public static void main(String[] args) {
        Collection c1 = new ArrayList();
        c1.add("hello");
        c1.add("world");
        c1.add("java");
        c1.add("hadoop");
        c1.add("world");

        Object[] objects = c1.toArray();
        for(int i=0;i<objects.length;i++){
            Object obj = objects[i]; // "hello"
            String s = (String)obj;
            //向下转型,才可使用元素自己类型的方法
            System.out.println(s+"-"+s.length());
        }
迭代器
 //每一个迭代器,都有一个独立指针,每调用一次next()方法,就会向后移动一次指针取数据
        //iterator.hasNext()用来判断下一个位置上是否有元素
        while (iterator.hasNext()){
            Object obj = iterator.next();
            String s = (String)obj;
            System.out.println(s+"-"+s.length());
        }
集合遍历
// 4、遍历集合
        //方式1:转数组遍历
//        Object[] objects = c1.toArray();
//        for(int i=0;i<objects.length;i++){
//            Object obj = objects[i];
//            Student s = (Student) obj;
//            System.out.println(s.getName()+"-"+s.getAge());
//        }

        //方式2:迭代器遍历
        Iterator iterator = c1.iterator();
        while (iterator.hasNext()){
            Object obj = iterator.next();
            Student s = (Student) obj;
            System.out.println(s.getName()+"-"+s.getAge());
        }

list集合

/*
    List集合:元素可以发生重复,有序(指存储和取出的顺序一致)
    Collection【接口】:
         - List【接口】
            ArrayList
         - Set【接口】

    List集合中特有的成员方法:
        void add(int index,E element)
        E remove(int index)
        E get(int index)
        E set(int index,E element)
        ListIterator listIterator()

 */
public class ListDemo1 {
    public static void main(String[] args) {
        List list1 = new ArrayList();

        list1.add("hello");
        list1.add("apple");
        list1.add("banana");
        list1.add("watermelon");
        list1.add("mango");

        System.out.println("list1: " + list1);

        System.out.println("==================================");
        //因为List相关集合具备索引的特点,List集合根据索引提供一些其它集合没有的方法
        //void add(int index,E element) 指定索引位置添加元素 grape
        list1.add(2,"grape");
        System.out.println("list1: " + list1);
        System.out.println("==================================");
        // E remove(int index) 根据索引从集合中移除元素
        System.out.println(list1.remove(2));
        System.out.println("list1: " + list1);
        System.out.println("==================================");
        //E get(int index) 根据索引获取对应元素
        System.out.println(list1.get(3));
        System.out.println("list1: " + list1);
        System.out.println("==================================");
        //E set(int index,E element) 指定索引位置修改元素
        System.out.println(list1.set(3, "orange"));
        System.out.println("list1: " + list1);
        System.out.println("==================================");
        //ListIterator listIterator()
        ListIterator listIterator = list1.listIterator();
        //从前向后取
        while (listIterator.hasNext()){
            System.out.println(listIterator.next());
        }
        System.out.println("==================================");
        //从后向前取
        //注意:一个集合迭代器只有一个游标,要想倒着遍历,必须先正着遍历一遍,所以该方法用的较少
        while (listIterator.hasPrevious()){
            System.out.println(listIterator.previous());
        }

/*
    需求:遍历集合,当遇到mango的时候,向集合中添加一个元素"java"

    我们发现如果使用迭代器遍历,集合发生修改的话,报错了
    ConcurrentModificationException

 */
public class ListDemo2 {
    public static void main(String[] args) {
        List list1 = new ArrayList();

        list1.add("hello");
        list1.add("apple");
        list1.add("banana");
        list1.add("watermelon");
        list1.add("mango");
        list1.add("peach");
        list1.add("pear");

        System.out.println("list1: " + list1);
        System.out.println("======================================");
        //1、转数组遍历
//        Object[] objects = list1.toArray();
//        for(int i=0;i<objects.length;i++){
//            Object obj = objects[i];
//            String s = (String) obj;
//            if("mango".equals(s)){
//                list1.add("java");
//            }
//        }
//        System.out.println("list1: "+list1);
//        System.out.println("======================================");

        //2、使用迭代器遍历
//        Iterator iterator = list1.iterator();
//        while (iterator.hasNext()){
//            Object obj = iterator.next();
//            String s = (String) obj;
//            if("mango".equals(s)){
//               list1.add("java");
//            }
//        }
//        System.out.println("list1: "+list1);

        //使用List集合中特有的迭代器进行遍历比较,且使用它进行添加元素
        ListIterator listIterator = list1.listIterator();
        while (listIterator.hasNext()) {
            Object obj = listIterator.next();
            String s = (String) obj;
            if ("mango".equals(s)) {
                listIterator.add("java");
            }
        }
        System.out.println("list1: " + list1);


    }
}
posted @   先瞄准再开枪  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示