java学习(三)-----集合
1、集合的体系
集合的体系是一个树形结构,最上面的一层是collection(根),这是一个接口,collection有两个直接子接口继承collection,一个是list接口(特点:有序,有索引,可重复存储),一个是set接口(无序,无索引,不可重复存储)。list接口下有三个类继承list,1、ArrayList 2、LinkList 3、Vector 这三个中最常用的是ArrayList 。set接口下有两个类,1、HashSet 2、TreeSet
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底层是链表结构的,增和删比较快,查询和修改比较慢
共同点:都是线程不安全的
上一篇: php文件包含目录配置open_basedir的使用与性能详解
下一篇: nexus设置代理仓库