15(Collection中的List中的ArrayList,LinkedList,Vectory,数据结构之数组和链表)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Haidaiya/article/details/82881529

1 对象数组

Student类不再书写。

但是数组的长度是固定的,集合类可以存储任意对象,长度也是可以改变的。

2 集合体系图

因为Collection是一个接口,不能被实例化。

3 Collection中的方法

Collection c = new ArrayList();//父类引用指向子类对象

4 基本方法

package com.haidai.collection;

import java.util.ArrayList;
import java.util.Collection;

public class Demo1 {

	public static void main(String[] args) {
		Collection c = new ArrayList();//父类引用指向子类对象
		c.add("a");
		c.add("b");
		c.add("c");
		System.out.println(c);
		
		System.out.println(c.size());//集合大小
		
		c.remove("a");
		c.remove("b");
		System.out.println(c);
		
		c.contains("c");//是否包含
		
		c.clear();
		System.out.println(c);
		
	
	}

}

5 集合转数组并遍历

package com.haidai.collection;

import java.util.ArrayList;
import java.util.Collection;

public class Demo2 {

	public static void main(String[] args) {
		Collection c = new ArrayList();
		c.add("a");
		c.add("b");
		c.add("c");
		c.add("d");
		c.add("e");
		
		Object[] array = c.toArray();//集合转换数组
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}
		
	}

}

6 迭代器

package com.haidai.collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Demo3 {

	public static void main(String[] args) {
		//demo1();
		Collection c = new ArrayList();
		c.add(new Student("王磊",23));
		c.add(new Student("朱宏林",23));
		c.add(new Student("刘洋",23));
		c.add(new Student("李道辉",23));
		
		Iterator it = c.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
			Student t = (Student) it.next();//这里为什么要强转Student呢?因为it.next()是Object类型
			
		}
	}

	private static void demo1() {
		Collection c = new ArrayList();
		c.add("a");
		c.add("b");
		c.add("c");
		c.add("d");
		
		//获取迭代器迭代集合中的元素
		Iterator it = c.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
	}

}

7 List

list也是一个接口,他是collection的子类,所以只需要看他和Collection不同的方法就可以了。

public static void main(String[] args) {
		List list = new ArrayList();
		list.add("a");
		list.add("b");
		list.add("c");
		list.add("d");
		list.add(1,"e");//在列表指定位置添加元素
		System.out.println(list);
	}	

8 并发修改和异常查询问题

当遇到了未知的错误的时候,先把错误拷贝至JDK1.6文档中查询,上面的错误叫做并发修改错误,产生的原因在于,list大小为6,迭代器接受的大小也是6,但是在遍历中却发生了修改,导致了错误的发生。

解决方法:使用List集合特有的迭代器ListIterator。

8 数据结构之数组(一排格子)链表(监狱风云)

关于数组,当我们每次增加元素时或者减少元素时都很慢,这是因为数组一旦初始化就不能改变大小,所以底层先创建一个更大的数组,然后再继续复制元素到新的数组。所以增删元素非常慢,但是它查询修改快,就是因为它具有索引,可以通过索引快速查找修改数组中的元素。

关于链表,我相信不需要叙述了。

猜你喜欢

转载自blog.csdn.net/Haidaiya/article/details/82881529