Java集合-ArrayList

集合就是一个保存数据的容器。在计算机中引入集合,是为了便于处理一组类似的数据。Java标准库自带的java.util包提供了集合相关的接口和实现类:Collection接口,它是除了Map接口外所有其他集合类的根接口。

Java的Java.uitl包主要提供以下三种类型的集合:

  • List:一种有序表的集合;
  • Set:一种保证没有重复元素的集合
  • Map:一种通过键值对查找的映射表集合。

Java集合的设计有几个特点:首先实现了接口和实现类相分离,比如:有序表的接口是List,具体的实现类有ArrayList、LinkedLis、Vectort;其次支持泛型,我们可以限制在一个集合中只能放入同一种数据类型的元素。 

一、List集合

List集合的特点:有序、允许重复。

List的行为和数组几乎完全相同:List 内部按照放入元素的先后顺存放,每个元素都可以通过索引确定自己的位置,List的索引和数组一样,从0开始。

List的实现类:ArrayList、LinkedList、Vector。

1.ArrayList的内部数据结构是Object[]数组

特点:

        1.初始化为一个空数组{ }

内部源码为:

 public ArrayList() {
    this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
 }
        2.第一次添加元素时,该数组扩容为10
        3.数组容量不足时,该数组的容量扩容为原容量的1.5倍。扩容方法:grow()
int newCapacity = oldCapacity + (oldCapacity >> 1);
2.主要方法。

方法1:add(E e)  作用:添加新元素至集合的尾部

方法2:add(int index,E e) 作用:添加新元素至集合的指定位置

方法3:addAll(Collection c)  作用:添加另一个集合中所有的元素至当前集合的尾部

方法4:addAll(int index,Collection c)  作用:添加另一个集合中所有的元素至当前集合指定位置

public static void main(String[] args) {
		
		//创建集合对象
		ArrayList list = new ArrayList();
		
		//操作1:添加新元素
		//add(E e)方法:添加新元素至集合的尾部
		list.add("小乔");
		list.add("曹操");
		list.add("刘备");
		list.add("后裔");
		System.out.println(list);
		
		//add(int index,E e)方法:添加新元素至集合的指定位置
		list.add(0, "李白");
		System.out.println(list);
		
		//addAll(Collection c)方法
		//addAll(int index,Collection c)方法
		//添加另一个集合中所有的元素至当前集合
		ArrayList subList = new ArrayList();
		subList.add("孙悟空");
		subList.add("猪八戒");
		subList.add("白骨精");
		
		//将subList中的所有元素添加至list集合的尾部
//		list.addAll(subList);
		list.addAll(1,subList);
		System.out.println(list);
		
		
	}

 输出:

[小乔, 曹操, 刘备, 后裔]
[李白, 小乔, 曹操, 刘备, 后裔]
[李白, 孙悟空, 猪八戒, 白骨精, 小乔, 曹操, 刘备, 后裔]

方法5:get(int index)   作用:获取元素(按照下标位置,获取元素)

方法6:remove(int index)  作用:按照下标删除元素

             remove(Object value)  作用:按照值删除

方法7:indexOf(Object o)  作用:查找元素

方法8:set(int index,E e)  作用:按照下标,修改对应元素。

//创建临时的List集合
List boyList = Arrays.asList("YK","QTZ","CBY","ZRZ","YWQ");
//全部添加至ArrayList集合中
ArrayList list = new ArrayList();
list.addAll(boyList);
System.out.println(list);

//操作2:获取元素(按照下标位置,获取元素)
//get(int index)
 String first = list.get(0);
String last = list.get(list.size()-1);
System.out.println("首元素:"+first);
System.out.println("为元素:"+last);
		
		
//操作3:删除元素(按照下标或值,进行删除)
//remove(int index)按照下标删除
//remove(Object value) 按照值删除
System.out.println("删除前:"+list);
		
//list.remove(1);  //按照下标删除
list.remove("YWQ"); //按照值删除
		
System.out.println("删除后:"+list);

//操作4:查找元素
//indexOf(Object o)
int index1 = list.indexOf("ZWY");
System.out.println("查找一个不存在的元素:"+index1);
		
int index2 = list.indexOf("YK");
System.out.println("查找一个已存在的元素:"+index2);
//操作5:修改元素
//set(int index,E e);
		
System.out.println("修改前:"+list);
list.set(1, "QQQ");
System.out.println("修改后:"+list);

输出:

[YK, QTZ, CBY, ZRZ, YWQ]
首元素:YK
为元素:YWQ
删除前:[YK, QTZ, CBY, ZRZ, YWQ]
删除后:[YK, QTZ, CBY, ZRZ]
查找一个不存在的元素:-1
查找一个已存在的元素:0
修改前:[YK, QTZ, CBY, ZRZ]
修改后:[YK, QQQ, CBY, ZRZ]

方法9:list.clear()   作用:清空集合内的所有元素

方法10:isContains(E e)   作用:查看元素是否存在

方法11:subList(int index,int index)  作用:截取子集合

方法12:toArray()  作用:将集合转换成数组

方法13:toArray(T[ ] a)  作用:将集合转换成数组

public static void main(String[] args) {
		List boyList = Arrays.asList("YK","QTZ","CBY","ZRZ","YWQ");
		
		//全部添加至ArrayList集合中
		ArrayList list = new ArrayList();
		list.addAll(boyList);
		System.out.println(list);
		
		//查看元素是否存在
		boolean isContains = list.contains("yangQi");
		System.out.println(isContains);
		
		//截取子集合
		 List subs = list.subList(0, 3);
		 System.out.println(subs);
		
		//转换成数组
		Object[] array1 = list.toArray();//Object数组
		String[] array2 = list.toArray(new String[list.size()]); //String数组
		
		System.out.println(Arrays.toString(array1));
		System.out.println(Arrays.toString(array2));
//		
		//清空
		list.clear();
		System.out.println(list);
		
		
		
	}

输出:

[YK, QTZ, CBY, ZRZ, YWQ]
false
[YK, QTZ, CBY]
[YK, QTZ, CBY, ZRZ, YWQ]
[YK, QTZ, CBY, ZRZ, YWQ]
[]
3.数组的遍历
遍历方法1:冒泡排序
public static void main(String[] args) {
		ArrayList list = new ArrayList();
		list.addAll(Arrays.asList("E","D","K","M","N","A"));
		
		//方式1:冒泡排序
		for(int i = 0;i0) {
					String temp = list.get(k);
					list.set(k, list.get(k+1));
					list.set(k+1, temp);
				}
			}
		}
		
	}

输出:

[A, D, E, K, M, N]
遍历方法2:使用sort()方法
public static void main(String[] args) {
		ArrayList list = new ArrayList();
		list.addAll(Arrays.asList("E","D","K","M","N","A"));
		
		//方式2:使用sort()方法
		list = new ArrayList();
		list.addAll(Arrays.asList("E","D","K","M","N","A"));
		list.sort(new Comparator() {

			@Override
			public int compare(String o1, String o2) {
				
				return o1.compareTo(o2);
			}
			
		});
		System.out.println(list);
	}

输出:

[A, D, E, K, M, N]
4.通过创建ArrayList集合
        1.通过[无参构造方法]创建ArrayList集合
		//通过[无参构造方法]创建ArrayList集合
		//数组默认被初始化成一个空数组
		ArrayList list1 = new ArrayList();
		list1.add(5178);//添加第1个元素时,将数组扩容为10
		list1.add(1852);//添加第2个元素
		list1.add(1555);//添加。。。个元素
		list1.add(9527);//添加第10个元素

		//添加第11个元素时,容量不足,再次将数组扩容,按照原容量的1.5倍
		list1.add(1024);
        2.通过[有参构造方法]创建Arraylist集合
		ArrayList list2 = new ArrayList(200);
		
		//创建集合时,传入另外一-个Collection集合, 并H.按照该集合的元素进行初始化
		ArrayList list3 = new ArrayList(Arrays.asList(1,2,3));

下一篇:LinkedList

你可能感兴趣的:(java,开发语言)