• Java ---------- 集合


    和数组相比

    a、数组长度固定不变,不能很好的适应元素数量动态变化的情况

    b、可以通过数组名 .lenght 获取数组的长度,却无法直接获取数组中实际存储的元素个数。

    c、数组采用在内存中分配连续空间的存储方式存储,查询时效率较低需要多次比较。

    一、 集合   位于java.util 包中

    为了保存数量不确定的,以及具有映射关系的数据,集合类主要负责保存、盛装其他数据也被称为容器类

    和数组不同的是,数组的元素既可以是基本类型的值,也可以是对象(引用变量),而集合只能保存对象(引用变量)

    主要包括 Collection  和 Map是Java 集合的根接口,两个接口有包含了一些子接口或实现类

     1、List 接口

    常用的实现类  ArrayList 和 LinkedList

    1.1、使用ArrayList 类动态存储数据

    ArrayList 对数组进行了封装,实心了长度可变的数组,而且和数组采用了相同的存储方式,在内存中分配连续的空间,所以也被称为动态数组。

    但是不等同于数组,ArrayList集合中可以添加任何类型的数组,并且添加的数组都将转换成为Object 类型,而在数组中只能添加同一类型的数据。

    常用的方法:

     

     代码:

    调用 add(Object obj)方法时,添加到集合中的数据会被转换为Object类型

    package com.obge.boge;
    
    import java.util.ArrayList;
    
    public class Gather {
    
        public static void main(String[] args) {
            //ArrayList
            ArrayList arrayList = new ArrayList();
            //添加  会把输入的类型转换为 object 类型
            arrayList.add("周瑜");
            arrayList.add(1.22);
            arrayList.add('男');
            //判断指定元素是否在 ArrayList 集合中    返回的类型是  boolean
            System.out.println(arrayList.contains(1.22));
            System.out.println(arrayList.equals(1.2));
            //把索引为0 的数据移除
            arrayList.remove(1);
            System.out.println("****************");
            //判断arraylist 中元素个数
            System.out.println("arrayList 中总数为:"+arrayList.size());
            //返回元素的下标        有啥发现
            System.out.println("arrayList 中周瑜的下标为:"+arrayList.indexOf("周瑜"));
            System.out.println("arrayList 中男的下标为:"+arrayList.indexOf('男'));
            System.out.println("*************************");
            //修改下标对应的元素
            arrayList.set(1,34343);
            //
            for(int i=0;i<arrayList.size();i++){
                //输出打印
                System.out.println(arrayList.get(i));
                //强转一下输出, 下标为 1 的还会报 类型转换错误
    //            String obts = (String)arrayList.get(i);
    //            System.out.println(obts);
            }
    
            System.out.println("**********************************");
            arrayList.add("obge");
            arrayList.set(1,999);
    
    
            for(Object obj : arrayList){
                //很强
                //String st = (String)obj;
                System.out.println(obj);
            }
            System.out.println(arrayList.isEmpty());
            System.out.println("************************");
            //清空数据
            arrayList.clear();
            //判断集合中是否是空
            System.out.println(arrayList.isEmpty());
    
    
        }
    
    }

     存放对象时:

    遍历的时候,要强转为存储的对象

    package com.obge.boge;
    
    import com.obge.model.Animal;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Gather2 {
        public static void main(String[] args) {
            //创建三个对象
            Animal onea = new Animal("one",11,"男");
            Animal twoa = new Animal("two",12,"男");
            Animal threea = new Animal("three",13,"女");
            //多态  向上转
            List anList = new ArrayList();
            //将三个对象放到ArrayList中
            anList.add(onea);
            anList.add(twoa);
            anList.add(threea);
            //判断个数
            System.out.println("共有"+anList.size()+"个");
            System.out.println("遍历输出名字 :");
            //通过循环遍历
            for(Object obj:anList){
                //转换为 Animal 类
                Animal resan = (Animal)obj;
                //打印名字
                System.out.println(resan.getName());
            }
    
        }
    
    }

    由于ArrayList集合可以使用索引来直接获取元素,所以其优点是遍历元素和随机访问的效率比较高,但是由于ArrayList集合采用了和数组相同的存储方式,

    在内存中分配连续的空间,因此在添加和删除非尾部元素时会导致后面所有的元素移动,这就造成了在插入、删除等操作频繁的应用场景下使用ArrayList性能低下。

    List 接口下的LinkedList类

    特点:

    LinkedList 类是List 接口的链接列表的实现类,支持实现所有List接口可选的列表操作,并允许所有的元素值是任何数据,包括null。

    LinkedList 采用链表存储方式存储数据,在插入、删除元素时效率比较高,但是查找效率低。

     特殊的方法:

    除了包含ArrayList 类的方法外,还可以对LinkedList 类的首部或尾部进行插入删除操作。

     //try 

    package com.obge.boge;
    
    import com.obge.model.Animal;
    
    import java.util.LinkedList;
    
    public class LinkedListStu {
    
        public static void main(String[] args) {
            //链表的方式存储
            Animal animal = new Animal("dog",0,"男");
            Animal animal1 = new Animal("dog1",1,"男");
            Animal animal2 = new Animal("dog2",2,"男");
            Animal animal3 = new Animal("dog3",3,"男");
            //实例化一个linkedlist集合存储数据
            LinkedList alist = new LinkedList();
            //放到里面
            alist.add(animal);
            alist.add(animal1);
            //观察下标位置
            System.out.println("第一次animal的下标是:"+alist.indexOf(animal));
            //把 animal3 放到首位
            alist.addFirst(animal3);
            //aniaml2 放到末尾
            alist.addLast(animal2);
            //在看位置
            System.out.println("第二次animal的下标是:"+alist.indexOf(animal));
            //打印有多少个
            System.out.println("存储了:"+alist.size()+"个");
            //获取最后一个动物名成
            Animal lastAnimal;
            lastAnimal = (Animal)alist.getFirst();
            System.out.println("获取最后一个名字:"+lastAnimal.getName());
            //删除第一个
            alist.removeFirst();
            //输出打印
            System.out.print("遍历输出:");
            for(Object resLin:alist){
                Animal ani = (Animal)resLin;
                System.out.print(ani.getName()+"   ");
            }
        }
    
    
    }
    ArrayList 类和 LinkedList 类的区别
    //ArrayList 类和 LinkedList 类的区别
    1.ArrayList 与 LinkedList 都是 List 接口的实现类,因此都实现了 List 的所有未实现的方法,只是实现的方式有所不同。
    
    2.ArrayList 是基于动态数组数据结构的实现,访问元素速度优于 LinkedList。LinkedList 是基于链表数据结构的实现,占用的内存空间比较大,但在批量插入或删除数据时优于 ArrayList。
    
    3.对于快速访问对象的需求,使用 ArrayList 实现执行效率上会比较好。需要频繁向集合中插入和删除元素时,使用 LinkedList 类比 ArrayList 类效果高。不同的结构对应于不同的算法,有的考虑节省占用空间,有的考虑提高运行效率,高运行速度往往是以牺牲空间为代价的,而节省占用空间往往是以牺牲运行速度为代价的。 
  • 相关阅读:
    cookies和re
    2018福大软工实践-第一次作业之自我介绍
    2018福大软工实践-第一次作业
    Linux shell脚本编程
    课程第八次作业
    课程第七次作业
    课程第六次作业
    课程第五次作业
    四则运算课程第四次作业
    第三次课程作业
  • 原文地址:https://www.cnblogs.com/obge/p/12435744.html
Copyright © 2020-2023  润新知