JavaSE-- 16-1集合类-相关总结

目录

说一下ArrayList 和LinkList 的区别?

迭代器Iterator使用

迭代器原理

要在遍历的过程做修改怎么办?

List  的常用子类

Vector  与ArrayList  

 LinkedList 


说一下ArrayList 和LinkList 的区别?

1.arrayList 是动态数组 ,List接口的实现,LinkList 是链表List接口实现。

2.arrayList插入和删除慢,LinkList查找慢。

任何对象加入集合类中自动转化为Object 类,取出时需要进行类型转化。

  • 迭代器Iterator使用

 

 next ()操作一次后会指向下一个。NoSuchElementException - 如果迭代没有更多的元素

  • while循环遍历
public   static  void iterator(Collection   collection){

    Iterator   iterator =collection.iterator();
    while (iterator.hasNext()){

      System.out.println(iterator.next());

    }

}
  • for 循环遍历:
public   static  void iterator_ByFor(Collection   collection){
   for (Iterator   iterator =collection.iterator();iterator.hasNext();)
    {
        System.out.println(iterator.next());
    }
}

迭代器原理

每个容器内部对象都实现了iterator 接口, 例如ArraList 内部:

 private class Itr implements Iterator<E> {
        int cursor;
        int lastRet = -1;
        int expectedModCount;

        Itr() {
            this.expectedModCount = ArrayList.this.modCount;
        }

        public boolean hasNext() {
            return this.cursor != ArrayList.this.size;
        }

        public E next() {
            this.checkForComodification();
            int var1 = this.cursor;
            if (var1 >= ArrayList.this.size) {
                throw new NoSuchElementException();
            } else {
                Object[] var2 = ArrayList.this.elementData;
                if (var1 >= var2.length) {
                    throw new ConcurrentModificationException();
                } else {
                    this.cursor = var1 + 1;
                    return var2[this.lastRet = var1];
                }
            }
        }

 

 Iterator iterator()  :取出元素的方式:迭代器

对该对象必须依赖于具体容器,因为每一个容器的数据类型都不一样。

对于使用容器者而言,具体实现不重要,只要通过容器获取到该对象即可。

Collection :

  List : 有序存入和取出顺序一致,元素都有索引,元素可以重复。

 Set:元素不能重复,无序。

package collection;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListDemo {

    public static void main(String[] args) {
       listdemo();
    }

   public static  void    listdemo(){
        List list =new ArrayList();
        list.add("aaaaa");
        list.add("bbbbb");
        list.add("cccccc");
        list.add("cccccc");
        list.add("cccccc");
        System.out.println(list);
        //返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
        System.out.println(list.lastIndexOf("aaaaa"));
        Iterator  iterator =list.iterator();
        while(iterator.hasNext()){
        System.out.println(iterator.next());
        }
        //删除 remove
        list.remove(1);
        System.out.println(list);
        // 获取 get(int index)
        System.out.println(list.get(1));//cccccc
        // 获取子列表sublist
        List list1=  list.subList(3,4);
        System.out.println(list1);//cccccc
        //修改set
        System.out.println("修改前:");
        System.out.println(list);
        System.out.println("修改后");
        list.set(2,"qqqqqq");
        System.out.println(list);
   }
}

两种获取方式:

 

1.Iterator iterator =list.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); }

2. // 获取 get(int index)
for(int i=0;i<list.size();i++){
    System.out.println(list.get(i));//cccccc

}

 1.在迭代期间进行集合操作。Iterator 会报异常。 此时添加元素,

iterator 在遍历,但是此时进行了add 操作。 

 2.迭代器Iterator 没有添加元素的方法。

  • 为什么要使用列表迭代器的原因:

要在遍历的过程做修改怎么办?

public  static void lisrIterator(){

  List list =new  ArrayList();
  list.add("11111");
  list.add("22222");
  list.add("33333");
    ListIterator it= list.listIterator();
    while (it.hasNext()){
        if(it.next().equals("11111"))
        it.set("88888");
    }
    System.out.println(list);
     
    • hasPrevious()

      返回 true如果遍历反向列表,列表迭代器有多个元素。

    while (it.hasPrevious()){
        if(it.previous().equals("22222"))
            it.set("5555");
    }
    System.out.println(list);
}

List  的常用子类

Vector  与ArrayList  

虚线框都是接口,List :

Vector: 内部数组数据结构,同步的   几乎不用了    增删查询都很慢

  • Vector类实现了可扩展的对象数组。 像数组一样,它包含可以使用整数索引访问的组件。 但是, Vector的大小可以根据需要增长或缩小,以适应在创建Vector之后添加和删除项目。

  • 从Java 2平台v1.2,这个类被改造为实现List接口,使其成为成员Java Collections Framework 。 与新集合实现不同, Vector是同步的。 如果不需要线程安全的实现,建议使用ArrayList代替Vector

 ArrayList :内部数数组数据结构 ,不同步的。替代了Vector 查询快,增删慢。

  • 可调整大小的数组的实现List接口。 实现所有可选列表操作,并允许所有元素,包括null 。 除了实现List 接口之外,该类还提供了一些方法来操纵内部使用的存储列表的数组的大小。 (这个类是大致相当于Vector,不同之处在于它是不同步的)。

 LinkedList 

链表实现,不同步。增删元素快

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中创建应用所需的基本资源,包括 Java 运行时环境,库,代码示例和演示应用。根据 TIOBE 编程社区索引,Java 编程语言是软件开发人员的最佳选择之一,他们力争在基于 C 和 C-based 语言中占据上风。从 PC,移动终端或媒体播放器到更复杂的医疗设备,全球大多数电子设备都使用其功能。 Java SE Development Kit (JDK) 15.0 x64 免费下载Java SE Development Kit (JDK) 15.0 x64 免费下载 JDK 是什么? JDK 是整个 Java 的核心,包括了 Java 运行环境(Java Runtime Envirnment),一堆 Java 工具和 Java 基础的库(rt.jar).不论什么 Java 应用服务器实质都是内置了某个版本的 JDK。 因此掌握 JDK 是学好 Java 的第一步.最主流的 JDK 是 Sun 公司发布的 JDK,除了 Sun 之外,还有很多公司和组织都开发了自己的 JDK,例如 IBM 公司开发的 JDK,BEA 公司的 Jrocket,还有 GNU 组织开发的 JDK 等等。 Java 平台提供了一种环境,可以为多种操作系统(例如 Microsoft Windows,Mac OS X 或 Linux 发行版)开发软件。 Java 运行时环境(JRE)允许您执行 Java 应用程序,组件和小程序,而 Java 开发套件(JDK)提供了一套全面的工具,供程序员构建,运行,调试甚至记录 Java 代码。 您还可以访问 JRE 的 Java 虚拟机(JVM)组件以及库和支持文件,以实现您的应用程序。 JDK 使用 Java 基础(包括 Swing 和 Java Platform Debugger Architecture)打包了说明性源代码和特定 API。它还以各种 Java 核心API源文件的形式提供了针对 Java 编程语言初学者的学习材料。 作为最常用的 Java 软件开发套件(SDK),JDK 的第一手组件包括 Java 应用程序的加载器(简称为 Java),即由编译器(javac)创建的文件的解释器,该编译器本身就是源代码。从原始格式到 Java 字节码的代码,以及用于执行和调试 Java 小程序的 Appletviewer。 除了这些工具之外,JDK 还提供了注释处理工具,用于 JAR 文件冲突检测的 extcheck,Java 编译器的 idlj IDL,使用源代码注释的 javadoc 文档生成器或 Javadoc 文档生成器。 jar`归档程序,将单个 JAR 文件中的相关库汇总在一起。其他工具包括反汇编程序,启动程序,调试器,Java 命令行脚本外壳或策略创建和管理实用程序。 大眼仔(www.dayanzai.me)在这里提示的是,Java 开发工具包集成了一组功能强大的工具,无论其知识水平如何,它们都可以帮助程序员实现 Java 应用程序。尽管如此,JDK 是任何 Java 开发人员的重要基础工具。 Windows 系统下配置 Java 开发 JDK 环境配置教程

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值