Java-数组列表(ArrayList)

       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:

public static void main(String[] args)
{
   ArrayList<String> aList = new ArrayList<String>();
   aList.add("blue");
   aList.add("black");
   aList.add("red");
   aList.add(1, "yellow");
   aList.add((aList.size() - 1), "green");
   System.out.print(aList);
}

该程序的输出为:

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

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

在上述程序后添加

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

输出:

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

3.具体例子分析

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

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

话不多说,上代码:

import javax.swing.JOptionPane;
import java.util.Scanner;
import java.util.*;

public class InsertNumberIntoCorrectPositionVersion
{
  public static ArrayList<Integer> numbers = new ArrayList<Integer>();  	
  public static void main(String [] args)
  {
    insertElement(1);     writeElements();
    insertElement(10);    writeElements();
    insertElement(5);     writeElements();
    insertElement(4);     writeElements();
    insertElement(11);    writeElements();
    insertElement(12);    writeElements();
    insertElement(9);     writeElements();
  } 
  public static void insertElement(Integer valueToInsert)//插入元素方法
  { 
     if (numbers.isEmpty())//如果数组列表为空,直接插入
        numbers.add(0, valueToInsert);
     else if (valueToInsert < numbers.get(0))//如果该数比数组列表最小的数还小       
        numbers.add(0, valueToInsert);//插入到0位置
     else if (numbers.get(numbers.size() - 1) < valueToInsert)//该数比最大的数还大
        numbers.add(numbers.size(), valueToInsert);//插入到末尾
     else	
     {  	  
        int index, current, next;
        boolean locationFound = false;
        for(index = 0; index < numbers.size() - 1 && !locationFound; index++)
        {
           current = numbers.get(index);   
           next = numbers.get(index + 1);
           if (valueToInsert > current && valueToInsert <  next)//找到该数该插入的位置
           {
             numbers.add(index + 1, valueToInsert);
             locationFound = true;
           }
        }  
     } 
  } 
  public static void writeElements()//输出数组列表的方法
  {
   for (int index = 0; index < numbers.size(); index++)
     System.out.print(numbers.get(index) + "\t"); 
   System.out.println();
   System.out.println();
  }
}

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

  • 模型:

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

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

     方法如下:

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

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

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

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

import javax.swing.JOptionPane;
import java.util.Scanner;
import java.util.*;

public class Task
{
  public static ArrayList<ArrayList<String>> contactsList;//定义一个多维数组
  public static void main(String [] args)
  {
    createArrayList();//申请空间 
    insertDetails();//插入数据
	writeContacts();//输出多维数组
  }	
  public static void createArrayList()
  {
    int numberOfSubLists = 6; 
       contactsList = new ArrayList<ArrayList<String>>();
    for (int i = 0; i < numberOfSubLists; i++)
	   contactsList.add(i, new ArrayList<String>());//申请6个ArrayList的大小
  }
  public static void insertDetails()
  {
    String elementsToInsert[] = new String[6]; 
    elementsToInsert[0] = "Black";
    elementsToInsert[1] = "Jim";
    elementsToInsert[2] = "061-11234";
    elementsToInsert[3] = "085-1234566";
    elementsToInsert[4] = "jim.black@gmail.com";
    elementsToInsert[5] = "123 O'Connell St Limerick";   
    insertEntry(elementsToInsert);
  }
  public static void insertEntry(String [] elementsToInsert)
  {
    int index;
    String current, next;
    boolean locationFound = false;  
	//如果多维数组列表第0个ArrayList为空,即整个多维数组列表为空
	//将elementsToInsert数组按下标依次插入多维数组列表第0,1,...,5个ArrayList
    if (contactsList.get(0).size() == 0)                                       
	   for (int i = 0; i < elementsToInsert.length; i++) 
          contactsList.get(i).add(0, elementsToInsert[i]);
    //如果该人的姓比第一个人的姓字典序还小,直接把该人的信息插入0位置
    else if (elementsToInsert[0].compareToIgnoreCase(contactsList.get(0).get(0)) < 0)
	  for (int i = 0; i < elementsToInsert.length; i++)  
        contactsList.get(i).add(0, elementsToInsert[i]);    
	//如果该人的姓比最后一个人的姓字典序还大,直接把该人的信息插入末尾
    else if (((contactsList.get(0).get(contactsList.get(0).size() - 1)).compareToIgnoreCase(elementsToInsert[0])) < 0)
      for (int i = 0; i < elementsToInsert.length; i++)  	    	    
        contactsList.get(i).add(contactsList.get(i).size(), elementsToInsert[i]);
   else	//否则的话要找到一个合适的位置再进行插入(比前一个人的姓字典序大,比后一个的姓字典序小)
   {  	
    for(index = 0; index < contactsList.size() - 1 &&  !locationFound; index++)
    {
      current = contactsList.get(0).get(index);
      next  = contactsList.get(0).get(index + 1);
      if (elementsToInsert[0].compareToIgnoreCase(current) > 0  && elementsToInsert[0].compareToIgnoreCase(next) < 0)
      {
	    for (int i = 0; i < elementsToInsert.length; i++)  
           contactsList.get(i).add(index + 1, elementsToInsert[i]);
        locationFound = true;
     }
    }
   }
 }  	
   public static void writeContacts()
  {
    int count = 0;  
    for (int index = 0; index < contactsList.get(0).size(); index++)
    {
      System.out.println(contactsList.get(0).get(index)); 
      System.out.println(contactsList.get(1).get(index));  
      System.out.println(contactsList.get(2).get(index));  
      System.out.println(contactsList.get(3).get(index));  
      System.out.println(contactsList.get(4).get(index));  
      System.out.println(contactsList.get(5).get(index));  
    }
  }
}	

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

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值