精华内容
下载资源
问答
  • arrayli
    2017-05-19 22:49:21

    ArrayList:在我个人现阶段理解而来ArrayList其实就是一个更高级一点的数组,它提供了给动态增加和减少元素,能更加灵活的设置数组的大小并且实现了List接口,且容量足够大,在我制作简易的图书馆系统中就用到了ArrayList,我发现它比我想象的要更好用,在测试类中用子类储存的方法 ,现在我就以我做的简易图书馆管理系统为例讲述我的理解:

             

    static ArrayList<Books>addbook=new ArrayList<Books>();
            static ArrayList<Ebooks>movebook=new ArrayList<Ebooks>();
    static ArrayList<Magazine>servalbook=new ArrayList<Magazine>();
    static ArrayList<Paper>listbook=new ArrayList<Paper>();

    既可以实现将我将图书放在一个数组中的功能,并且还能通过调用此方法在次基础上添加新的图书的功能,

    储存书: 

    public static void listbooks(){
                 Books bs=new Books("三体","刘慈欣","刘氏出版社",2300,60);
                 Books bs1=new Books("四世同堂","舒庆春","老舍出版社",1600,40);
                 Books bs2=new Books("三生三世三生石","文涛","文家出版社",1800,80);
                    addbook.add(bs);
                    addbook.add(bs1);
                    addbook.add(bs2);


    添加新书:

    public static void add(){
               Scanner in =new Scanner(System.in);
              System.out.println("请输入书籍名称");
              String bookname=in.next();
              System.out.println("请输入书籍作者");
              String bookwriter=in.next();
            System.out.println("请输入书籍出版社");
            String press=in.next();
           System.out.println("请输入书籍页数");
           int count=in.nextInt();
          System.out.println("请输入书籍价格");
          double prise=in.nextDouble();
           Books book=new Books(bookname, bookwriter, press, count, prise);
      }

    这都是通过ArrayList动态数组的方法来调用实现的,可以很有逻辑很清晰的展示出来,旁人一看便知道什么意思以及实现的适合功能。这便是我的一些个人小理解。不喜欢勿喷,喷了也没事,反正我也不看。

    更多相关内容
  • Java_ArrayLit详细用法

    2021-02-27 17:46:42
    1、什么是ArrayListArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处:动态的增加和减少元素实现了ICollection和IList接口灵活的设置数组的大小2、如何使用ArrayList最...

    1、什么是ArrayList

    ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和IList接口 灵活的设置数组的大小

    2、如何使用ArrayList 最简单的例子: ArrayList List = new ArrayList(); for( int i=0;i <10;i++ )

    //给数组增加10个Int元素 List.Add(i); //..程序做一些处理 List.RemoveAt(5);//将第6个元素移除 for( int i=0;i <3;i++ )

    //再增加3个元素 List.Add(i+20); Int32[] values =

    (Int32[])List.ToArray(typeof(Int32));//返回ArrayList包含的数组

    这是一个简单的例子,虽然没有包含ArrayList所有的方法,但是可以反映出ArrayList最常用的用法

    3、ArrayList重要的方法和属性 1)构造器 ArrayList提供了三个构造器: public ArrayList(); 默认的构造器,将会以默认(16)的大小来初始化内部的数组 public ArrayList(ICollection); 用一个ICollection对象来构造,并将该集合的元素添加到ArrayList public ArrayList(int); 用指定的大小来初始化内部的数组

    2)IsSynchronized属性和ArrayList.Synchronized方法 IsSynchronized属性指示当前的ArrayList实例是否支持线程同步,而ArrayList.Synchronized静态方法则会返回一个ArrayList的线程同步的封装。 如果使用非线程同步的实例,那么在多线程访问的时候,需要自己手动调用lock来保持线程同步,例如: ArrayList list = new ArrayList(); //... lock( list.SyncRoot )

    //当ArrayList为非线程包装的时候,SyncRoot属性其实就是它自己,但是为了满足ICollection的SyncRoot定义,这里还是使用SyncRoot来保持源代码的规范性 { list.Add( “Add a Item” ); }

    如果使用ArrayList.Synchronized方法返回的实例,那么就不用考虑线程同步的问题,这个实例本身就是线程安全的,实际上ArrayList内部实现了一个保证线程同步的内部类,ArrayList.Synchronized返回的就是这个类的实例,它里面的每个属性都是用了lock关键字来保证线程同步。

    3)Count属性和Capacity属性 Count属性是目前ArrayList包含的元素的数量,这个属性是只读的。 Capacity属性是目前ArrayList能够包含的最大数量,可以手动的设置这个属性,但是当设置为小于Count值的时候会引发一个异常。

    4)Add、AddRange、Remove、RemoveAt、RemoveRange、Insert、InsertRange 这几个方法比较类似 Add方法用于添加一个元素到当前列表的末尾 AddRange方法用于添加一批元素到当前列表的末尾 Remove方法用于删除一个元素,通过元素本身的引用来删除 RemoveAt方法用于删除一个元素,通过索引值来删除 RemoveRange用于删除一批元素,通过指定开始的索引和删除的数量来删除 Insert用于添加一个元素到指定位置,列表后面的元素依次往后移动 InsertRange用于从指定位置开始添加一批元素,列表后面的元素依次往后移动

    另外,还有几个类似的方法: Clear方法用于清除现有所有的元素 Contains方法用来查找某个对象在不在列表之中

    其他的我就不一一累赘了,大家可以查看MSDN,上面讲的更仔细 5)TrimSize方法 这个方法用于将ArrayList固定到实际元素的大小,当动态数组元素确定不在添加的时候,可以调用这个方法来释放空余的内存。 6)ToArray方法 这个方法把ArrayList的元素Copy到一个新的数组中。 4、ArrayList与数组转换 例1: ArrayList List = new ArrayList(); List.Add(1); List.Add(2); List.Add(3);

    Int32[] values = (Int32[])List.ToArray(typeof(Int32));

    例2: ArrayList List = new ArrayList(); List.Add(1); List.Add(2); List.Add(3);

    Int32[] values = new Int32[List.Count]; List.CopyTo(values);

    上面介绍了两种从ArrayList转换到数组的方法

    例3: ArrayList List = new ArrayList(); List.Add( “string” ); List.Add( 1 ); //往数组中添加不同类型的元素

    object[] values = List.ToArray(typeof(object));

    //正确 string[] values = (string[])List.ToArray(typeof(string)); //错误

    和数组不一样,因为可以转换为Object数组,所以往ArrayList里面添加不同类型的元素是不会出错的,但是当调用ArrayList方法的时候,要么传递所有元素都可以正确转型的类型或者Object类型,否则将会抛出无法转型的异常。

    5、ArrayList最佳使用建议 这一节我们来讨论ArrayList与数组的差别,以及ArrayList的效率问题 1)ArrayList是Array的复杂版本 ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚

    定到实际元素的大小,当动态数组元素确定不在添加的时候,可以调用这个方法来释放空余的内存。 6)ToArray方法 这个方法把ArrayList的元素Copy到一个新的数组中。 4、ArrayList与数组转换 例1: ArrayList List = new ArrayList(); List.Add(1); List.Add(2); List.Add(3);

    Int32[] values = (Int32[])List.ToArray(typeof(Int32));

    例2: ArrayList List = new ArrayList(); List.Add(1); List.Add(2); List.Add(3);

    Int32[] values = new Int32[List.Count]; List.CopyTo(values);

    上面介绍了两种从ArrayList转换到数组的方法

    例3: ArrayList List = new ArrayList(); List.Add( “string” ); List.Add( 1 ); //往数组中添加不同类型的元素

    object[] values = List.ToArray(typeof(object));

    //正确 string[] values = (string[])List.ToArray(typeof(string)); //错误

    和数组不一样,因为可以转换为Object数组,所以往ArrayList里面添加不同类型的元素是不会出错的,但是当调用ArrayList方法的时候,要么传递所有元素都可以正确转型的类型或者Object类型,否则将会抛出无法转型的异常。

    5、ArrayList最佳使用建议 这一节我们来讨论ArrayList与数组的差别,以及ArrayList的效率问题 1)ArrayList是Array的复杂版本 ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。 2)内部的Object类型的影响 对于一般的引用类型来说,这部分的影响不是很大,但是对于值类型来说,往ArrayList里面添加和修改元素,都会引起装箱和拆箱的操作,频繁的操作可能会影响一部分效率。 但是恰恰对于大多数人,多数的应用都是使用值类型的数组。 消除这个影响是没有办法的,除非你不用它,否则就要承担一部分的效率损失,不过这部分的损失不会很大。 3)数组扩容 这是对ArrayList效率影响比较大的一个因素。 每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。 例1:比如,一个可能有200个元素的数据动态添加到一个以默认16个元素大小创建的ArrayList中,将会经过: 16*2*2*2*2 = 256 四次的扩容才会满足最终的要求,那么如果一开始就以: ArrayList List = new ArrayList( 210 ); 的方式创建ArrayList,不仅会减少4次数组创建和Copy的操作,还会减少内存使用。

    例2:预计有30个元素而创建了一个ArrayList: ArrayList List = new ArrayList(30); 在执行过程中,加入了31个元素,那么数组会扩充到60个元素的大小,而这时候不会有新的元素再增加进来,而且有没有调用TrimSize方法,那么就有1次扩容的操作,并且浪费了29个元素大小的空间。如果这时候,用: ArrayList List = new ArrayList(40); 那么一切都解决了。 所以说,正确的预估可能的元素,并且在适当的时候调用TrimSize方法是提高ArrayList使用效率的重要途径。 4)频繁的调用IndexOf、Contains等方法(Sort、BinarySearch等方

    法经过优化,不在此列)引起的效率损失 首先,我们要明确一点,ArrayList是动态数组,它不包括通过Key或者Value快速访问的算法,所以实际上调用IndexOf、Contains等方法是执行的简单的循环来查找元素,所以频繁的调用此类方法并不比你自己写循环并且稍作优化来的快,如果有这方面的要求,建议使用Hashtable或SortedList等键值对的集合。 ArrayList al=new ArrayList();

    al.Add("How"); al.Add("are"); al.Add("you!");

    al.Add(100); al.Add(200); al.Add(300);

    al.Add(1.2); al.Add(22.8);

    使用ArrayList类

    ArrayList类实现了List接口,由ArrayList类实现的List集合采用数组结构保存对象。数组结构的优点是便于对集合进行快速的随机访问,如果经常需要根据索引位置访问集合中的对象,使用由ArrayList类实现的List集合的效率较好。数组结构的缺点是向指定索引位置插入对象和删除指定索引位置对象的速度较慢,如果经常需要向List集合的指定索引位置插入对象,或者是删除List集合的指定索引位置的对象,使用由ArrayList类实现的List集合的效率则较低,并且插入或删除对象的索引位置越小效率越低,原因是当向指定的索引位置插入对象时,会同时将指定索引位置及之后的所有对象相应的向后移动一位,如图1所示。当删除指定索引位置的对象时,会同时将指定索引位置之后的所有对象相应的向前移动一位,如图2所示。如果在指定的索引位置之后有大量的对象,将严重影响对集合的操作效率。

    a4c26d1e5885305701be709a3d33442f.png

    图1 向由ArrayList类实现的List集合中插入对象

    a4c26d1e5885305701be709a3d33442f.png

    图2 从由ArrayList类实现的List集合中删除对象

    就是因为用ArrayList类实现的List集合在插入和删除对象时存在这样的缺点,在编写例程06时才没有利用ArrayList类实例化List集合,下面看一个模仿经常需要随机访问集合中对象的例子。

    在编写该例子时,用到了java.lang.Math类的random()方法,通过该方法可以得到一个小于10的double型随机数,将该随机数乘以5后再强制转换成整数,将得到一个0到4的整数,并随机访问由ArrayList类实现的List集合中该索引位置的对象,具体代码如下:

    src\com\mwq\TestCollection.java关键代码:

    public static void main(String[] args) {

    String a = "A", b = "B", c = "C", d = "D", e = "E";

    List list = new ArrayList();

    list.add(a); // 索引位置为 0

    list.add(b); // 索引位置为 1

    list.add(c); // 索引位置为 2

    list.add(d); // 索引位置为 3

    list.add(e); // 索引位置为 4

    System.out.println(list.get((int) (Math.random() *

    5))); // 模拟随机访问集合中的对象

    }

    我实际中的练习例子:

    packagecode;

    importjava.util.ArrayList;

    importjava.util.Iterator;

    publicclassSimpleTest {

    publicstaticvoidmain(String []args){

    ArrayList list1 = newArrayList();

    list1.add("one");

    list1.add("two");

    list1.add("three");

    list1.add("four");

    list1.add("five");

    list1.add(0,"zero");

    System.out.println(""+ list1.size()+"个元素");

    System.out.println("");

    ArrayList list2 = newArrayList();

    list2.add("Begin");

    list2.addAll(list1);

    list2.add("End");

    System.out.println(""+ list2.size()+"个元素");

    System.out.println("");

    ArrayList list3 = newArrayList();

    list3.removeAll(list1);

    System.out.println("");

    list3.add(0,"same element");

    list3.add(1,"same element");

    System.out.println(""+ list3.size()+"个元素");

    System.out.println("");

    System.out.println("");

    System.out.println("");

    System.out.println("");

    Iterator it = list3.iterator();

    while(it.hasNext()){

    String str = (String)it.next();

    System.out.println("");

    }

    System.out.println("");

    list3.set(0,"another element");

    list3.set(1,"another element");

    System.out.println("");

    // Object [] array =(Object[]) list3.toArray(new Object[list3.size()] );

    Object [] array = list3.toArray();

    for(inti =0; i 

    String str = (String)array[i];

    System.out.println("array["+ i +"] = "+ str);

    }

    System.out.println("");

    list3.clear();

    System.out.println("");

    System.out.println(""+ list3.size()+"个元素");

    //System.out.println("hello world!");

    }

    }

    展开全文
  • 之前遇到过java 异常java.lang.UnsupportedOperationException。 其中Arrays$ArrayList使用add(),remove()等方法时会报错。 如果是这样的话,那么使用Arrays.ArrayList和类似的EmptyList有什么作用呢?...

    之前遇到过java 异常java.lang.UnsupportedOperationException。
    其中Arrays$ArrayList使用add(),remove()等方法时会报错。
    如果是这样的话,那么使用Arrays.ArrayList和类似的EmptyList有什么作用呢?

    源码分析

    查看EmptyList
    在这里插入图片描述
    发现其没有类似java.util.ArrayListzhong中的类似变量声明
    private static final int DEFAULT_CAPACITY = 10;

    即EmptyList始终是一个空的集合,不会添加元素,且调用get()方法时会报越界异常。

    那么EmptyList与new 一个List实例有什么区别?
    EmptyList时Collections中的静态类,因此类似于单例模式,每次使用时不需要构造一个实例。
    因此比构造一个空的List对象更加节省资源,性能也更快。

    类似的Arrays$ArrayList也没有默认长度
    在这里插入图片描述
    构造方法中传入一个数组。生成的ArrayList元素不会再次变动。。

    应用场景

    Arrays.ArrayList
    适用于已有一个数组,需快速构造一个list,且只提供读取操作,不进行增删操作的场景。

    EmptyList
    使用于需提供一个空集合的场景。
    如在web开发时,当使用Rest+json的技术组合来进行前后端交互,那么当前端调用一个接口时,接口有可能需要返回一个空的集合给到前端,比如你根据某个条件查数据库得不到数据时,那么此时Collections.emptyXXX()就非常合适了,因为使用new ArrayList()的初始化还会占用相关的资源(网上查询得知)。

    展开全文
  • public class num8 { public ArrayList merge(ArrayList intervals){ ArrayList res = new ArrayList(); if(intervals == null || intervals.isEmpty()) return res; Comparator comparator = new Comparator()
    public class num8 {
    public ArrayList<Interval> merge(ArrayList<Interval> intervals){
    ArrayList<Interval> res = new ArrayList<Interval>();
    if(intervals == null || intervals.isEmpty()) return res;
    Comparator<Interval> comparator = new Comparator<Interval>() {
    @Override
    public int compare(Interval a, Interval b) {
    if(a.start < b.start) return -1;
    else if(a.start > b.start) return 1;
    else{
    if(a.end < b.end) return -1;
    else if(a.end > b.end) return 1;
    else return 0;
    }
    }
    };
    Collections.sort(intervals, comparator);
    /*
    System.out.println("zcf");
    for (Interval interval : intervals) {
    System.out.println(interval.start + "," + interval.end);
    }*/

    for(int i = 0 ;i < intervals.size();i++){
    Interval current = intervals.get(i);
    if(res.isEmpty()){
    res.add(current);
    }else {
    Interval last = res.get(res.size() - 1);
    if(last.end >= current.start){
    last.end = Math.max(last.end, current.end);
    }else{
    res.add(current);
    }
    }
    }
    return res;
    }
    public static void main(String[] args) {
    Interval[] A = new Interval[4];
    A[0] = new Interval(1, 5);
    A[1] = new Interval(6, 10);
    A[2] = new Interval(4, 6);
    A[3] = new Interval(15, 20);
    ArrayList<Interval> aIntervals = new ArrayList<Interval>();
    for(int i = 0;i < A.length;i++){
    aIntervals.add(A[i]);
    }
    ArrayList<Interval> res = new ArrayList<Interval>();
    res = new num8().merge(aIntervals);
    System.out.println(res.size());
    for (Interval interval : res) {
    System.out.println(interval.start + "," + interval.end);
    }
    }
    }
    展开全文
  • 1.其中原因之一是,SpringMVC默认是不支持对象转换为JSON的,需要额外添加依赖,在pom.xml添加如下: <dependency> <groupId>com.fasterxml.jackson.core<.../groupId> <artifactId>.../versi
  • ArrayList的用法+IJ报错

    2022-05-10 19:26:14
    创建一个Interface crudRobot管理机器人的增删查改操作,机器人存放ArrayList或者LinkedList里。Interface crudRobot定义如下: Interface crudRobot{ void creat(List robot); void display(List robot);...
  • ArrayList和LinkedList

    2022-03-01 14:44:05
    一.ArrayList和LinkedList的大致区别 1、arrayList是基于动态数组的数据结构,linkedList是基于链表的数据结构 2、对于随机访问get和set,arrayList是优于linkedList的,因为后者要移动指针 3、对于新增和删除操作add...
  • package com.chaowen; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.......
  • 现在2020年的春招招聘已经基本上落下了帷幕,随后而来的就是六月毕业季,一大批应届毕业生准备进军招聘市场,其中不乏有一大批计算机软件专业的学生选择进入java领域,但无论你是应届生找工作还是打算跳槽的java...
  • ​ public class list{ public static void main(String[] args) { List<String> li=new ArrayList<>(); li.add("789"); li.add("abc"); li.add(0,"app");//将app插入到索引0的位置 ... //集合遍历si.
  • package com.arraylist; public class Student { private String name; public Student() { } public Student(String name, int age) { this.age = age; this.name = name; } public String getName......
  • java.lang.IndexOutOfBoundsException,Index和Size不同的值,有不同的含义,先理解这两项对解决问题更有帮助
  • 在java中 使用面向接口编程 也就是面向抽象编程 这样程序 可扩展性更好 降低耦合 ArrayList LinkedList 都是List 的子类 就像 Set 也是Collection 的子接口 它的实现 有 hashSet linkedHashSet TreeSet 等 ...
  • 报错如下: E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.ex1, PID: 7652 java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 at java.util.ArrayList.add(ArrayList.java:483) ...
  • 背景: 我们经常会在网上看到一些面试题,比如HashMap数据结构、Handler实现原理、binder进程通信等等。但是很多文章都是深入分析,缺少对每个环节问题点提问,比如这块为什么要这么设计。面试官也不会问完一个问题...
  • Lab Report 10 Note: All your lab reports should be uploaded to BB before the deadline. Caution Must be original works, to prohibit any copying or plagiarism 一、Experimental Purposes and ...
  • JDBC入门

    2020-10-07 16:05:40
    1 概述 在Java中,数据库存取技术可分为如下几类:  JDBC直接访问数据库  JDO技术(Java Data Object)  第三方O/R工具,如Hibernate, Mybatis 等 JDBC是java访问数据库的基石,JDO, Hibernate等只是更好的...
  • 不会写 看不懂 想到学校那么多孤儿大学生 越想越气 偷东西的手剁了得了 题目 ... 分析 代码 class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { int count=0; int len=flowerbed.... .
  • 2020-03-29

    2020-03-29 21:24:31
    创建一个animal类,animal类包含属性种类type,体重weight,腿数量legs,三个字段都必须在构造方法内。并有呼吸,吃,打印属性3种方法,再定义个类cat和fish,都继承animal类,并根据实际情况复写字段种类type,体重...
  • public class 拆分 { public static void main(String[] args) { String str = "A1B2C3D4E5F6G7H8"; //根据题目要求定义字符串 int i = 0; //两个自加变量并且初始化 int a = 0; int[] shu = new int[8]...
  • 问题描述 出现 No converter found for return value of type: class java.util.ArrayList 这种错误 1.原因:这是因为springmvc默认是没有对象转换成json的转换器的,需要手动添加jackson依赖。...
  • 09-12 18:35:46.601 28640-28640/com.moreunion.zhenghao E/AndroidRuntime: FATAL EXCEPTION: main Process: com.moreunion.zhenghao, ...
  • java中foreach用法 文章目录java中foreach用法java中foreach用法Array和ArrayList的区别以及使用区别Array和ArrayList的使用注意 java中foreach用法 java的foreach的使用 (java根本没有foreach,或者说foreach就是 ...
  • 关于解决Property or field 'id' cannot be found on object of type问题的思路
  • JAVA--Array--foreach循环

    2020-06-10 15:57:02
    foreach循环一般是用来打印出数组的 案例 ... public class ArrayDemo03 { public static void main(String[] args) { int[] array = {1,2,3,4,5}; //For-each循环(一般是用来打印输出一些结果) jdk1.5 没有下标 ...
  • 重装scala报错 解决方法删除环境变量下的classpath,开启新的命令窗口,再次运行
  • 编写一个类Book,具有name,price,press,author 然后创建5个对象放入ArrayList中,并实现按照price大小排序, 然后遍历ArrayList输出每个Book对象, 使用toString 方法打印。 import java.util.ArrayList;...
  • Java易错笔试题目4

    2020-08-23 10:55:05
    快手的题目 https://www.cnblogs.com/cthon/p/9533083.html
  • 昨天帮朋友写一本java程序,因为好久没动手写java的代码了,而且mybatis也是第一次接触,代码写好后执行,就提示一个奇怪的错误: org.apache.ibatis.ognl.NoSuchPropertyException:ijava.util.Arrays$ArrayList....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,687
精华内容 674
关键字:

arrayli