欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java学习(三)-----集合

程序员文章站 2024-03-13 10:39:57
...

1、集合的体系

集合的体系是一个树形结构,最上面的一层是collection(根),这是一个接口,collection有两个直接子接口继承collection,一个是list接口(特点:有序,有索引,可重复存储),一个是set接口(无序,无索引,不可重复存储)。list接口下有三个类继承list,1、ArrayList  2、LinkList   3、Vector   这三个中最常用的是ArrayList 。set接口下有两个类,1、HashSet  2、TreeSet

java学习(三)-----集合

2、迭代器    Iterator方法

Collection c = new ArrayList();
		c.add("a");
		c.add("b");
		Iterator it = c.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
上面程序为迭代器的使用方法。

3、并发修改异常的解决办法(java.util.ConcurrentModificationException)

	Collection c = new ArrayList();
		c.add("a");
		c.add("b");
		Iterator it = c.iterator();
		while(it.hasNext()){
			String str = (String)it.next();
			if("b".equals(str))
				c.add("d");            //数组对象添加
		}
		System.out.println(c);
上面的程序运行之后会产生java.util.ConcurrentModificationException,那么这个是怎么回事呢,原因:
Iterator it = c.iterator();
这行代码获取了迭代器,而在之后的循环中我们向数组中增加了元素,迭代器还是那个迭代器,这样就会报上面的异常。简单点说也就是在遍历的过程中对数组进行了修改。解决办法:

java.util.List s = new ArrayList();
		s.add("a");
		s.add("b");
		ListIterator lt = s.listIterator();
		while(lt.hasNext()){
			String str = (String)lt.next();
			if("b".equals(str))
				lt.add("d");          //迭代器添加
		}
		System.out.println(s);
注意。这两段代码的不同之处在迭代器不同了,还有添加的部分。
4、比较几种集合的特点

ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。


Vector相对ArrayList查询慢(线程安全的)
Vector相对LinkedList增删慢(数组结构)


LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。


Vector和ArrayList的区别
Vector是线程安全的,效率低
ArrayList是线程不安全的,效率高
共同点:都是数组实现的


ArrayList和LinkedList的区别
ArrayList底层是数组结果,查询和修改快
LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
共同点:都是线程不安全的