黑马程序员_集合学习Collection之List学习笔记
2013-04-07 11:35
267 查看
------- android培训、java培训、期待与您交流! ----------
在List和Set接口下,又有很多特殊的容器。因为每一个容器对数据的存储方式都有不同,这个存储方式称之为:数据结构,它们自身具备的特点不同。
Collection
作为一个集合,应该具有的方法:增删改查
在collection中,存在这样一些抽象方法
add(),增加一个元素
addAll(),一次增加一堆元素(实现并集)
remove 删除一个元素
removeAll 删除一堆元素(实现差集)A-B
retainAll 保留两个集合中共有的元素。交集
对象创建在堆内存中,而对象的引用在栈内存中。
在集合中存储的都是对象的引用(地址)。
当我们取出元素中的集合时候,就可以使用迭代器,其实就是集合取出元素的方式
每个集合中有各自特定的取出方式,也就有一个特定的迭代器。取出这个类就定义在集合的内部。也就是用来取元素,在集合内部操作,这个迭代器内部类抽取了一些共性的方法,叫做Iterator接口,这个接口定义了抽象的方法,在各自不同的数据结构中,取出和判断的方式不同,故各个数据结构实现了自己特定的迭代器对象。可以使用 数据结构对象.iterator();得到其内部实现的迭代器。
实例:List集合中所定义的迭代器内部类,用于实现特定的取出元素的操作,定义为内部类
对于每一个容器来说,取出动作的细节也不一样,但是有共性内容,判断和取出,提取了一个Iterator接口。
其实迭代器就是取出元素的方式
Collection中,有两类常见的子接口(各自有各自体系下的特定的方法)
List:元素是有序的(按照存入的前后),元素可以重复。因为该集合体系有索引。可以在指定位置对元素进行操作。凡是带角标的,底层的实现都是数组结构。
对于List集合来说:比较元素是否相等使用的是存入元素的equals方法。
而且在删除元素的时候,也是使用equals去寻找有没有。然后去删除。
Set:元素是无序(内部其实有序,但是对于用户来说,是无序的,不根据用户的存入前后,顺序的存放)的,元素不可以重复。
对于List和Set中的共性方法,都在Collection中已经定义了,现在学习List和Set中的特殊方法。
List(最大的特定就是通过索引对集合中的元素进行操作)
增 add(index,element);
add(index,Collection);
删 remove(index);
改 set(index,element);
查 get(index);
subList(from,to);
ListIterator();
实例:
List中具体的列表迭代器的作用:
需求:现在要使用迭代器去集合中的元素取出,在取出的过程中进行一些操作。
但是,我们在使用普通迭代器操作集合对象的时候,再使用集合对象对元素进行操作
会出现并发操作的安全隐患。不能同时既使用集合操作集合中元素,又使用迭代器操作集合中元素。
解决方式:要么都使用集合的方式,要么都使用迭代器的方式。
例子:
对于公共类型的迭代器,只能进行三种类型的操作,判断,取出和删除。不能做添加动作,有局限性。
所以提供了一个ListIterator。
List集合特有的迭代器,ListIterator是Iterator子接口。,它提供了更加强大的功能。
该接口通过List集合对象.ListIterator()方法获取。
特点:在遍历过程中的增删改查。。。(由于不能通过集合对象的方法操作集合中的元素)
实例:
List中常见的共性方法介绍结束,现在讲解List常见的三个子类对象。(由于底层的数据结构不一样而出现的,以适应不同的条件)
ArrayList的特点:底层的数据结构是数组数据结构,查询,修改速度很快,但是增加,删除元素很慢。线程不同步。默认的情况下,长度为10,超过长度的时候,按照50%进行延长。变成15。(这也就是可变长度的数组的原理)
LinkedList:底层使用的是列表数据结构,增删的速度很快,查询比较慢
Vector :底层是数组数据结构,线程同步。默认长度为10.超过长度的时候,按照100%进行延长,变成20。
Vetor的特别学习(有一个特别的东西值得去学习)
LinkedList的学习(介绍它的特有方法)
集合
在集合框架中,Collection为与这个框架的顶层,它有两个子接口,List和Set在List和Set接口下,又有很多特殊的容器。因为每一个容器对数据的存储方式都有不同,这个存储方式称之为:数据结构,它们自身具备的特点不同。
Collection
作为一个集合,应该具有的方法:增删改查
在collection中,存在这样一些抽象方法
add(),增加一个元素
addAll(),一次增加一堆元素(实现并集)
remove 删除一个元素
removeAll 删除一堆元素(实现差集)A-B
retainAll 保留两个集合中共有的元素。交集
对象创建在堆内存中,而对象的引用在栈内存中。
在集合中存储的都是对象的引用(地址)。
ArrayList al = newArrayList(); //添加元素 al.add("01"); al.add("02"); al.add("03"); al.add("04"); //获取个数,集合的长度 System.out.println(al.size()); //删除元素 al.remove("01"); //判断元素 System.out.println(al.contains("02")); ArrayList al2 = new ArrayList(); al2.add("01"); al2.add("02"); //取交集,al中存放的为交集 System.out.println(al.retainAll(al2)); System.out.println(al);
当我们取出元素中的集合时候,就可以使用迭代器,其实就是集合取出元素的方式
每个集合中有各自特定的取出方式,也就有一个特定的迭代器。取出这个类就定义在集合的内部。也就是用来取元素,在集合内部操作,这个迭代器内部类抽取了一些共性的方法,叫做Iterator接口,这个接口定义了抽象的方法,在各自不同的数据结构中,取出和判断的方式不同,故各个数据结构实现了自己特定的迭代器对象。可以使用 数据结构对象.iterator();得到其内部实现的迭代器。
实例:List集合中所定义的迭代器内部类,用于实现特定的取出元素的操作,定义为内部类
private class ListItr extends Itr implements ListIterator<E> { ListItr(int index) { cursor = index; } publicbooleanhasPrevious() { returncursor != 0; } }
对于每一个容器来说,取出动作的细节也不一样,但是有共性内容,判断和取出,提取了一个Iterator接口。
其实迭代器就是取出元素的方式
Iterator it =al.iterator();//得到了相应集合中特定实现的迭代器 while(it.hasNext())//判断是否有下一个元素 { System.out.println(it.next()); }
Collection中,有两类常见的子接口(各自有各自体系下的特定的方法)
List:元素是有序的(按照存入的前后),元素可以重复。因为该集合体系有索引。可以在指定位置对元素进行操作。凡是带角标的,底层的实现都是数组结构。
对于List集合来说:比较元素是否相等使用的是存入元素的equals方法。
而且在删除元素的时候,也是使用equals去寻找有没有。然后去删除。
Set:元素是无序(内部其实有序,但是对于用户来说,是无序的,不根据用户的存入前后,顺序的存放)的,元素不可以重复。
对于List和Set中的共性方法,都在Collection中已经定义了,现在学习List和Set中的特殊方法。
List(最大的特定就是通过索引对集合中的元素进行操作)
增 add(index,element);
add(index,Collection);
删 remove(index);
改 set(index,element);
查 get(index);
subList(from,to);
ListIterator();
实例:
ArrayList al = new ArrayList(); al.add("00"); //添加元素使用特有方法 al.add(1,"01"); System.out.println(al); //删除指定位置的元素 al.remove(0); System.out.println(al); //修改元素。 al.set(0, "001"); System.out.println(al); //通过角标获取元素 System.out.println(al.get(0)); //获取所有的元素 for(int x =0;x<al.size();x++) { System.out.println(al.get(x)); } //使用迭代器的方式 Iterator it = al.iterator(); while(it.hasNext()) { System.out.println(it.next()); } //返回某一个特定元素在集合中的位置 System.out.println(al.indexOf("001")); al.clear(); al.add("11"); al.add("12"); al.add("13"); List sub = al.subList(0,2); System.out.println(sub);
List中具体的列表迭代器的作用:
需求:现在要使用迭代器去集合中的元素取出,在取出的过程中进行一些操作。
但是,我们在使用普通迭代器操作集合对象的时候,再使用集合对象对元素进行操作
会出现并发操作的安全隐患。不能同时既使用集合操作集合中元素,又使用迭代器操作集合中元素。
解决方式:要么都使用集合的方式,要么都使用迭代器的方式。
例子:
Iterator it =al.iterator(); while(it.hasNext()) { if(it.next().equals("02")) { it.remove();//也就是删除next得到的那个元素,不能同时使用两次remove。 } } System.out.println(al);
对于公共类型的迭代器,只能进行三种类型的操作,判断,取出和删除。不能做添加动作,有局限性。
所以提供了一个ListIterator。
List集合特有的迭代器,ListIterator是Iterator子接口。,它提供了更加强大的功能。
该接口通过List集合对象.ListIterator()方法获取。
特点:在遍历过程中的增删改查。。。(由于不能通过集合对象的方法操作集合中的元素)
实例:
ArrayList al = new ArrayList(); al.add("01"); al.add("02"); al.add("03"); //使用列表迭代器 ListIterator li =al.listIterator(); while(li.hasNext()) { Object obj = li.next(); if(obj.equals("02")) { // li.add("0000");//在next遍历到的元素之后加入该新元素 li.set("006");//修改当前next遍历到的元素。 } } System.out.println(al); while(li.hasPrevious()) { Object obj = li.previous();//当指针移动到最后的时候,它就有了前一个元素 //从集合的后往前遍历。 System.out.println(obj); }
List中常见的共性方法介绍结束,现在讲解List常见的三个子类对象。(由于底层的数据结构不一样而出现的,以适应不同的条件)
ArrayList的特点:底层的数据结构是数组数据结构,查询,修改速度很快,但是增加,删除元素很慢。线程不同步。默认的情况下,长度为10,超过长度的时候,按照50%进行延长。变成15。(这也就是可变长度的数组的原理)
LinkedList:底层使用的是列表数据结构,增删的速度很快,查询比较慢
Vector :底层是数组数据结构,线程同步。默认长度为10.超过长度的时候,按照100%进行延长,变成20。
Vetor的特别学习(有一个特别的东西值得去学习)
Vector v = new Vector(); v.add("01"); v.add("02"); v.add("03"); //特有方法。枚举(就像一个迭代器,是为了在io中去使用) Enumeration e = v.elements(); while(e.hasMoreElements()) { System.out.println(e.nextElement()); }
LinkedList的学习(介绍它的特有方法)
LinkedList link= new LinkedList(); link.add("01"); link.add("02"); link.add("03"); //LinkedList的特有方法 link.addFirst("first");//在集合的开始添加元素 link.addLast("last");//在集合的结尾添加元素 System.out.println(link); link.getFirst();//得到集合的一个元素 link.getLast();//得到自己和的最后一个元素 link.removeFirst();//删除第一个元素,并得到 link.removeLast();//删除最后一个元素,并得到 //当集合中没有元素的时候,调用get和remove的方法会抛出异常 //使用pollFirst去替代remove,当没有元素的时候,返回null; //使用offerFirst()替换getFirst() link.clear(); System.out.println(link.pollFirst());//null
相关文章推荐
- 黑马程序员_学习笔记:9) 集合框架1:Collection(List、Set)、Iterator、List(ArrayList、LinkedList、Vector)
- java 集合学习笔记1-Collection 集合遍历 List子类特点
- 黑马程序员-List集合共性方法,ListIterator学习笔记
- 黑马程序员--Java基础学习笔记【集合-List、泛型】
- JavaSE中Collection集合框架学习笔记(1)——具有索引的List
- 黑马程序员_学习笔记第14天——Collection集合
- 黑马程序员_集合学习Collection之Set学习笔记
- 黑马程序员----Java集合框架学习笔记1-List 与Set
- 【JavaSE学习笔记】集合01_Collection,List
- 黑马程序员------毕老师视频笔记第13-17天------集合Collection-List-(ArrayList、LinkedList)
- 黑马程序员——Java学习笔记之11——“Collection集合”总结
- 黑马程序员---集合(List)学习笔记
- 黑马程序员_JAVA学习日记_JAVA中API:集合框架1(Collection,List,Set及其子类和迭代器的应用)
- 黑马程序员——java学习8(166-179)——集合,Collection,List
- 黑马程序员--Java学习日记之集合(collection类与list接口)及泛型概述
- 黑马程序员_学习笔记第14天集合(一)_List、Set
- 黑马程序员_Java(对象数组,集合Collection,集合list)
- 黑马程序员-java集合 学习笔记
- 黑马程序员_学习日记39_604基础加强(垃圾回收、弱引用、集合ArrayList和Hashtable、泛型集合List和Dictionary、var)
- Java学习笔记-------集合List