当前位置:   article > 正文

Java-数组列表(ArrayList)_java 数组列表

java 数组列表

       ArrayList类是一个特殊的数组--动态数组。

       普通的数组是静态的,只有先确定了他的大小才能给它初始化赋值或者参与运算,而且这个大小一但初始化后是不能被修改的,所以当你刚开始不确定你要输入数据的多少时,普通的数组不容易实现(万一你输入的数据多于数组大小时,就会数组溢出,导致报错),为此java有了" 数组列表"(ArrayList)。

(小声bb:其实我感觉ArrayList,甚至是Java的整个集合类,都有与C++里的STL类似,所以有C++一些基础的同学们学这一部分应该会很轻松)

优点:

1、支持自动改变大小
2、可以灵活的插入删除元素

缺点:

比普通的数组的速度慢一些

目录

1.如何创建一个ArrayList?(定义一个ArrayList)

2.如何对数组列表进行插入、删除等操作?(ArrayList的方法)

3.具体例子分析

4.*拓展:(多维数组列表contactsList)


1.如何创建一个ArrayList?(定义一个ArrayList)

在Java中,我们可以通过创建这个简单的语句来创建字符串ArrayList:

ArrayList <String> aList = new ArrayList <String>();

在上面的语法中,aList是“String”类型,因此要添加到此列表的元素将是字符串类型。类型决定了哪种类型的元素列表。

ArrayList <String> aList = new ArrayList <Integer>();

上面的语法是接受int元素。

所以,我们可以有:

ArrayList<参数类型>  变量名字= new ArrayList<参数类型可以没有>;

另:

1、不初始化容量

ArrayList aList = new ArrayList(); //不初始化数组容量,当数组容量满时数组会以当前数组容量的2倍扩容

2、初始化容量

ArrayList aList = new ArrayList(10);//初始容量为10,相当于数组的最大容量

3、用一个集合或数组初始化 

ArrayList aList = new ArrayList(a);        //a为集合或数组

2.如何对数组列表进行插入、删除等操作?(ArrayList的方法)

  • aList.add(int index, Object obj)      将指定的对象添加到该集合中

           aList.add("apple"); //默认将“apple”插入到数组列表的末尾         

           aList.add(1, "pear");//将“pear”插入数组列表“1”的位置

  • aList.get(int index)      获得指定索引位置上的元素
  • aList.size()    获取数组列表的长度
  • aList.isEmpty()   判断数组列表是否为空  空为true

      补充:判断该数组列表是否为空,可以用aList.isEmpty()==true?判断,也可以用aList.size()==0? 来判断。

eg:

  1. public static void main(String[] args)
  2. {
  3. ArrayList<String> aList = new ArrayList<String>();
  4. aList.add("blue");
  5. aList.add("black");
  6. aList.add("red");
  7. aList.add(1, "yellow");
  8. aList.add((aList.size() - 1), "green");
  9. System.out.print(aList);
  10. }

该程序的输出为:

[blue, yellow, black, green, red]
  • aList.remove(int index)   将指定的对象从该数组列表中删除
  • aList.set(int index, Object obj)    将指定索引位置上的元素修改为指定对象

           aList.set(1, "pear"); //将数组列表中“1”位置上的元素替换为“pear”

在上述程序后添加

  1. System.out.println( );
  2. aList.remove(1);
  3. aList.set(1, "pink");
  4. for (int i = 0; i < aList.size(); i++)
  5. System.out.print(aList.get(i) + "\t");

输出:

  1. [blue, yellow, black, green, red]
  2. blue pink green red
  • aList.clear( )     清空数组列表
  • 在进行查找时,可以用类似字符串的方法:用 indexOf() , lastIndexOf()

3.具体例子分析

题目说明:将1,10,5,4,11,12,9依次放入数组列表,并且按升序维护每个元素。

分析:明白了数组列表的几种方法,这个程序就很好写了。大体思路就是每次插入都让这个数字插入到比他小的数后边,比他大的数前边。

话不多说,上代码:

  1. import javax.swing.JOptionPane;
  2. import java.util.Scanner;
  3. import java.util.*;
  4. public class InsertNumberIntoCorrectPositionVersion
  5. {
  6. public static ArrayList<Integer> numbers = new ArrayList<Integer>();
  7. public static void main(String [] args)
  8. {
  9. insertElement(1); writeElements();
  10. insertElement(10); writeElements();
  11. insertElement(5); writeElements();
  12. insertElement(4); writeElements();
  13. insertElement(11); writeElements();
  14. insertElement(12); writeElements();
  15. insertElement(9); writeElements();
  16. }
  17. public static void insertElement(Integer valueToInsert)//插入元素方法
  18. {
  19. if (numbers.isEmpty())//如果数组列表为空,直接插入
  20. numbers.add(0, valueToInsert);
  21. else if (valueToInsert < numbers.get(0))//如果该数比数组列表最小的数还小
  22. numbers.add(0, valueToInsert);//插入到0位置
  23. else if (numbers.get(numbers.size() - 1) < valueToInsert)//该数比最大的数还大
  24. numbers.add(numbers.size(), valueToInsert);//插入到末尾
  25. else
  26. {
  27. int index, current, next;
  28. boolean locationFound = false;
  29. for(index = 0; index < numbers.size() - 1 && !locationFound; index++)
  30. {
  31. current = numbers.get(index);
  32. next = numbers.get(index + 1);
  33. if (valueToInsert > current && valueToInsert < next)//找到该数该插入的位置
  34. {
  35. numbers.add(index + 1, valueToInsert);
  36. locationFound = true;
  37. }
  38. }
  39. }
  40. }
  41. public static void writeElements()//输出数组列表的方法
  42. {
  43. for (int index = 0; index < numbers.size(); index++)
  44. System.out.print(numbers.get(index) + "\t");
  45. System.out.println();
  46. System.out.println();
  47. }
  48. }

4.*拓展:(多维数组列表contactsList)

  • 模型:

  • 定义:如下
contactsList = new ArrayList<ArrayList<Type>>();//Type为接受元素的类型,如String,Integer...
  • 申请空间
  1. public static void createArrayList()
  2. {
  3. int numberOfSubLists = 6; //申请的长度
  4. contactsList = new ArrayList<ArrayList<String>>();
  5. for (int i = 0; i < numberOfSubLists; i++)
  6. contactsList.add(i, new ArrayList<String>());
  7. }
  8. //上述多维数组列表contactsList就是申请了6个ArrayList的长度,相当于二维数组的列下标开到了6;
  • 方法:

     与ArrayList的方法一样,唯一不同的是对多维数组列表使用方法时,要精确到每一个一维数组列表。

     方法如下:

  1. contactsList.get(0).size()//获取多维数组里的第0个ArrayList的长度
  2. contactsList.get(1).add(0, x)//向多维数组里的第1个ArrayList里的下标0位置插入元素x
  3. contactsList.get(2).get(3)//获取多维数组里的第2个ArrayList里的下标3的元素
  4. ......
  5. ......
  • 最后让我们快乐的读一下代码吧

题目:您需要开发一个允许用户维护联系人列表的应用程序。一个联系人应该有姓氏和名字,并且至少有以下其中一个:固定 电话号码、移动电话号码、电子邮件地址、邮政地址。

分析:直接用多维数组列表来存储,然后像上一个代码一样维护每组数据

(该程序只输入一个联系人,但是程序很完整,完全可以实现输入多组数据)

  1. import javax.swing.JOptionPane;
  2. import java.util.Scanner;
  3. import java.util.*;
  4. public class Task
  5. {
  6. public static ArrayList<ArrayList<String>> contactsList;//定义一个多维数组
  7. public static void main(String [] args)
  8. {
  9. createArrayList();//申请空间
  10. insertDetails();//插入数据
  11. writeContacts();//输出多维数组
  12. }
  13. public static void createArrayList()
  14. {
  15. int numberOfSubLists = 6;
  16. contactsList = new ArrayList<ArrayList<String>>();
  17. for (int i = 0; i < numberOfSubLists; i++)
  18. contactsList.add(i, new ArrayList<String>());//申请6个ArrayList的大小
  19. }
  20. public static void insertDetails()
  21. {
  22. String elementsToInsert[] = new String[6];
  23. elementsToInsert[0] = "Black";
  24. elementsToInsert[1] = "Jim";
  25. elementsToInsert[2] = "061-11234";
  26. elementsToInsert[3] = "085-1234566";
  27. elementsToInsert[4] = "jim.black@gmail.com";
  28. elementsToInsert[5] = "123 O'Connell St Limerick";
  29. insertEntry(elementsToInsert);
  30. }
  31. public static void insertEntry(String [] elementsToInsert)
  32. {
  33. int index;
  34. String current, next;
  35. boolean locationFound = false;
  36. //如果多维数组列表第0个ArrayList为空,即整个多维数组列表为空
  37. //将elementsToInsert数组按下标依次插入多维数组列表第0,1,...,5个ArrayList
  38. if (contactsList.get(0).size() == 0)
  39. for (int i = 0; i < elementsToInsert.length; i++)
  40. contactsList.get(i).add(0, elementsToInsert[i]);
  41. //如果该人的姓比第一个人的姓字典序还小,直接把该人的信息插入0位置
  42. else if (elementsToInsert[0].compareToIgnoreCase(contactsList.get(0).get(0)) < 0)
  43. for (int i = 0; i < elementsToInsert.length; i++)
  44. contactsList.get(i).add(0, elementsToInsert[i]);
  45. //如果该人的姓比最后一个人的姓字典序还大,直接把该人的信息插入末尾
  46. else if (((contactsList.get(0).get(contactsList.get(0).size() - 1)).compareToIgnoreCase(elementsToInsert[0])) < 0)
  47. for (int i = 0; i < elementsToInsert.length; i++)
  48. contactsList.get(i).add(contactsList.get(i).size(), elementsToInsert[i]);
  49. else //否则的话要找到一个合适的位置再进行插入(比前一个人的姓字典序大,比后一个的姓字典序小)
  50. {
  51. for(index = 0; index < contactsList.size() - 1 && !locationFound; index++)
  52. {
  53. current = contactsList.get(0).get(index);
  54. next = contactsList.get(0).get(index + 1);
  55. if (elementsToInsert[0].compareToIgnoreCase(current) > 0 && elementsToInsert[0].compareToIgnoreCase(next) < 0)
  56. {
  57. for (int i = 0; i < elementsToInsert.length; i++)
  58. contactsList.get(i).add(index + 1, elementsToInsert[i]);
  59. locationFound = true;
  60. }
  61. }
  62. }
  63. }
  64. public static void writeContacts()
  65. {
  66. int count = 0;
  67. for (int index = 0; index < contactsList.get(0).size(); index++)
  68. {
  69. System.out.println(contactsList.get(0).get(index));
  70. System.out.println(contactsList.get(1).get(index));
  71. System.out.println(contactsList.get(2).get(index));
  72. System.out.println(contactsList.get(3).get(index));
  73. System.out.println(contactsList.get(4).get(index));
  74. System.out.println(contactsList.get(5).get(index));
  75. }
  76. }
  77. }

(本人为Java的小白,刚学Java语言没多久,如果有什么错误,还请大家指教)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/795192
推荐阅读
相关标签
  

闽ICP备14008679号