• collection集合--List


    List

    list(有序、可重复)

    1.    有下标,怎么存的怎么取出来,可以存重复值;

    2.    用户可以根据元素插入集合中的位置准确的找到相关元素,并通过下标对存进去的元素进行操作

    List接口的子类:

                         ArrayList(查询用的多)

                         LinkedList(存储用的多);

                 从Collection继承来的方法带有下标的就是List独有的方法

    List及其子类的存储的特点:

    堆栈

     1.先进后出(就是在它后面存进去的集合在提取时先被依次取出,待它们取出结束后再取出)
    压栈的入口和出口都是栈的顶端位置; 

     

      压栈:就是存入元素;                

      弹栈:就是取出元素


    队列:

        1.先进先出(存进去的元素要在它前面的元素依次取出后才能取出); 

        2.入口,出口各占一侧

     

    数组类型的数组集合(ArrayList):

    1.查找元素快(通过索引可以快速的找到指定位置的元素;因为有下标所以查询快)
    增删元素慢:因为它的长度不可改变,增加或删除一个元素时需要先创建一个新               +++的数组,然后把增加或删除后的数组整个粘进去

     
      2.链表类型的数组集合(LinkedList):由数值域+指针域(存的是下一个元素的地址)组成;多个元素节点之间通过地址链接

    查找元素慢(因为没有下标,得通过地址一个一个找);想查找某个元素,需要通过连接的节点,依次向后查找指定元素
    2.增删速度快:因为新增或者删除一个元素直接改变元素链接的下一个地址就行;

    .ArrayList与LinkedList对比:

    。ArrayList是数组类型的集合:查询速度快,增删速度慢,所以多用ArrayList集合存储经常需要查询的数据;多用于查询业务。

    LinkedList是链表类型的集合:增删速度快,查询速度慢,所以多用LinkedList进行存储业务

           LinkedList是List的子类,List中的方法LinkedList都是可以使用,这里就不做详细介绍,

                我们只需要了解LinkedList的特有方法即可。在开发时,LinkedList集合也可以作为堆栈,队列的结构使用。


      Vector集合;就是早期的ArrayList(方法也一样)(和ArrayList一样都是数组类型的);枚举就是现在的迭代器(方法也一样)


    List:

           增加元素

                      add(Object e):向集合末尾处,添加指定的元素

                     add(int index, Object e):向集合指定索引处,添加指定的元素,原有元素依次后移

        删除元素删除

                      remove(Object e):将指定元素对象,从集合中删除,返回值为被删除的元素,(也可以理解为从容器里拿出来,容器里没有这个元素了,比如从果篮里拿出一个苹果,苹果我可以使用,果篮里已经没有这和苹果了)

                       remove(int index):将指定索引处的元素,从集合中删除,返回值为被删除的元素

       替换元素方法

                        set(int index, Object e):将指定索引处的元素,替换成指定的元素,返回值为替换前的元素

       查询元素方法

                        get(int index):获取指定索引处的元素,并返回该元素

    public static void main(String[] args) {
    
            List<String> list=new ArrayList<String>();//因为List是接口不能直接new对象需要借助多态,借助子类ArrayList进行new对象
    
    //指定插入元素
    
            list.add("a");
    
            //指定位置插入元素
    
            list.add(0,"b");//(指定位置,下标,插入的元素)
    
            list.add("c");
    
            //遍历
    
            for(int i=0;i<list.size();i++)
    
            {//因为List具有下标,可以用老式for进行循环取值
    System.
    out.println(list.get(i)); } //删除指定下标的元素, String str= list.remove(2);//
                这里str是返回值,是把删除的元素返回回来了,str就是删除的那个值
    因为这里的返回值是泛型,而List的泛型是String,所以这里用String str来接, .remove(下标),这里的下标填的谁就删除水 System.
    out.println("删除的元素为"+str); //修改指定位置上的值 list.set(0, "你好");//(下标,修改的值) //曾强for for(String s:list) {//因为这里只是取值并不对值进行增删操作不该变集合的长度,所以可以用增强for System.out.println(s); } } }

    LinkedList:

    LinkedList是基于链表的,它是一个双向链表,每个节点维护了一个prev和next指针。同时对于这个链表,维护了first和last指针,first指向第一个元素,last指向最后一个元素。LinkedList是一个无序的链表,按照插入的先后顺序排序,不提供sort方法对内部元素排序。

    Add元素:

      LinkedList提供了几个添加元素的方法:addFirst、addLast、addAll、add等,时间复杂度为O(1)。

    Remove元素:

      LinkedList提供了几个移除元素的方法:removeFirst、removeLast、removeFirstOccurrence、remove等,时间复杂度为O(1)。

    Get元素:

      根据给定的下标index,判断它first节点、last直接距离,如果index<size(数组元素个数)/2,就从first开始。如果大于,就从last开始。这个和我们平常思维不太一样,也许按照我们的习惯,从first开始。这也算是一点小心的优化吧。

    遍历

    在类集中提供了以下四种的常见输出方式:

    1)Iterator:迭代输出,是使用最多的输出方式。

    2)ListIterator:是Iterator的子接口,专门用于输出List中的内容。

    3)foreach输出:JDK1.5之后提供的新功能,可以输出数组或集合。

    4)for循环

    代码示例如下:

    for的形式:for(int i=0;i<arr.size();i++){...}

    foreach的形式: for(int i:arr){...}

    iterator的形式:
    Iterator it = arr.iterator();
    while(it.hasNext()){ object o =it.next(); ...}

    LinkedList:public static void main(String[] args){
    LinkedList<String> arr=new LinkedList<String>();
    arr,addFrist("a"); .addFrist()是把元素添加为第一个元素的意思,
    但是后来调用的.addFrist()方法的元素会替代之前用的或者现有的第一个元素 arr.addFrist(
    "b"); arr.addLast("c"); .addLast()是把元素添加为最后一个元素的意思,
    但是后来调用的.addLast()方法的元素会替代之前或者现有的最后一个元素 arr.addFrist(
    "d"); for(String s:arr){
    system.out.println(s)
    }//结果d,b,a,c

       //移除第一个位置的元素

       arr.removeFirst();

       System.out.println( arr.getFirst());//b

       //移除最后一个位置的元素

       arr.removeLast();

       System.out.println(arr.getLast());// c

       //清空

       arr.clear();

    
    

          while(!arr.isEmpty()){ //判断集合是否为空

         system.out.println(arr.getLast());

    
    

           }

    
    得到最后一个元素.getLast():system.out.println(arr.getLast());
    //判断集合中是否有元素:system.out.println(arr.isEmpty());
    结果是false,isEmpty()是判断集合是否为空是否没有值,所以是false如果没有值就返回true
  • 相关阅读:
    在x-code中添加全局变量
    项目中可能用到的demo
    iOS UIWebView 加载不被信任的 https 页面
    iOS 用Xcode自带的 symbolicatecrash 工具来解析的.crash文件
    iOS Push Notifications 开关按钮找不到
    iOS 使用系统自带的UITabbarItem的badge,通过setBadgeValue来设置tabar的角标。
    UITabbarItem imageview 实现点击有放大然后还原的动画效果
    iOS 把自己的库上传到cocoapods步骤,podspec配置。
    iOS 判断NSDictionary里是否有某个key。防止接收数据找不到key或者根据key取值的时候闪退。
    获取tabar点击事件 UITabBarControllerDelegate
  • 原文地址:https://www.cnblogs.com/layuechuquwan/p/11437914.html
Copyright © 2020-2023  润新知