黑马程序员——集合——Collection和单列集合List
2015-08-22 23:34
615 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
-------
一.集合概述
1.为什么我们编程中需要集合
数组既可以存储基本数据类型,也可以存储引用类型。
它存储引用类型的时候叫对象数组。
我们需要对多个对象进行存储和获取。可以使用对象数组。
但是,如果对象的个数是变化的,对象数组就不能解决。
java就提供了集合类来解决。
2.集合和数组的区别?
A:长度问题
数组长度固定
集合长度可变
B:存储元素种类
一个数组只能存储同一种类型元素
一个集合可以存储不同类型的对象元素
C:存储元素类型
数组可以存储基本类型数据,也可以存储引用类型数据。
集合只能存储引用类型数据。
3.集合体系的由来:
多种集合的数据结构是不相同的,但是,它们有共性的功能。
通过不断的向上抽取,最终形成了集合的体系结构。
Collection
|--List
|--ArrayList
|--Vector
|--LinkedList
|--Set
|--HashSet
|--TreeSet
二.集合的跟接口Collection
1.Collection接口的功能:
A:添加功能
add(Object obj)
B:删除功能
remove(Object obj)
C:判断功能
contains(Object obj)
D:获取功能
Iterator iterator()
E:长度功能
size()
2.迭代器的概述
A:迭代器其实就是遍历集合的一种方式。
B:迭代器的使用:
迭代器不能单独使用,它依赖于集合而存在。
C:使用步骤
a:通过集合对象调用iterator()方法得到迭代器对象。
b:通过迭代器对象的hasNext()方法判断是否有元素。
c:通过迭代器对象的next()获取元素。
D:使用原理:
是以内部类形式存在的。
3.集合的使用步骤:
A:非自定义对象集合的使用步骤
a.创建集合对象
b.创建元素对象
c.把元素添加到集合中
d.通过集合对象调用iterator()方法得到迭代器对象。
e.通过迭代器对象的hasNext()方法判断是否有元素。
f.通过迭代器对象的next()获取元素。
B:自定义对象集合的使用步骤
a.定义要存储到集合当中的类
b.创建集合对象:集合 集合引用变量 = new 集合();
c.创建要存储到集合当中的类的对象
d.调用集合方法,存储对应的对象
e.返回对应集合的迭代器
f.使用迭代器判断是否有下个元素
g.如果有下个元素则获取下个元素
4.存储学生对象并遍历:
三.单列集合List
1.List的特点:
List:元素有序(存入顺序和取出顺序一致),可重复。
2.List的特有功能:
A:添加功能
add(int index,Object obj)
B:删除功能
remove(int index)
C:获取功能
get(int index)
D:修改功能
set(int index,Object obj)
3.List特有的迭代器listIterator
A: 可以逆向遍历,但是要先正向遍历,一般不用。
B: 可以解决并发修改异常问题。
并发修改异常:在用迭代器遍历集合的时候,通过集合去修改了集合的元素。
解决方案:
a:通过列表迭代器遍历,通过列表迭代器修改集合。
b:通过集合遍历,通过集合修改集合。
listIterator案例:
4.List的三个子类的特点:
A.List:
|--ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低,一般不用。
|--LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
四.Collection和List及子类的遍历方式
Collection:
只能使用Iterator迭代器进行遍历
List:
方式一:使用普通for循环,通过索引进行遍历
方式二:使用listIterator迭代器遍历
ArrayList
方式一:使用普通for循环,通过索引进行遍历
方式二:使用listIterator迭代器遍历
Vector
方式一:使用普通for循环,通过索引进行遍历
方式二:使用返回Enumeration枚举进行遍历
LinkedList
方式一:使用普通for循环,通过索引进行遍历
方式二:使用listIterator迭代器遍历
案例:
List存储字符串并遍历。
List存储自定义对象并遍历。
-------
一.集合概述
1.为什么我们编程中需要集合
数组既可以存储基本数据类型,也可以存储引用类型。
它存储引用类型的时候叫对象数组。
我们需要对多个对象进行存储和获取。可以使用对象数组。
但是,如果对象的个数是变化的,对象数组就不能解决。
java就提供了集合类来解决。
2.集合和数组的区别?
A:长度问题
数组长度固定
集合长度可变
B:存储元素种类
一个数组只能存储同一种类型元素
一个集合可以存储不同类型的对象元素
C:存储元素类型
数组可以存储基本类型数据,也可以存储引用类型数据。
集合只能存储引用类型数据。
3.集合体系的由来:
多种集合的数据结构是不相同的,但是,它们有共性的功能。
通过不断的向上抽取,最终形成了集合的体系结构。
Collection
|--List
|--ArrayList
|--Vector
|--LinkedList
|--Set
|--HashSet
|--TreeSet
二.集合的跟接口Collection
1.Collection接口的功能:
A:添加功能
add(Object obj)
B:删除功能
remove(Object obj)
C:判断功能
contains(Object obj)
D:获取功能
Iterator iterator()
E:长度功能
size()
2.迭代器的概述
A:迭代器其实就是遍历集合的一种方式。
B:迭代器的使用:
迭代器不能单独使用,它依赖于集合而存在。
C:使用步骤
a:通过集合对象调用iterator()方法得到迭代器对象。
b:通过迭代器对象的hasNext()方法判断是否有元素。
c:通过迭代器对象的next()获取元素。
D:使用原理:
是以内部类形式存在的。
3.集合的使用步骤:
A:非自定义对象集合的使用步骤
a.创建集合对象
b.创建元素对象
c.把元素添加到集合中
d.通过集合对象调用iterator()方法得到迭代器对象。
e.通过迭代器对象的hasNext()方法判断是否有元素。
f.通过迭代器对象的next()获取元素。
B:自定义对象集合的使用步骤
a.定义要存储到集合当中的类
b.创建集合对象:集合 集合引用变量 = new 集合();
c.创建要存储到集合当中的类的对象
d.调用集合方法,存储对应的对象
e.返回对应集合的迭代器
f.使用迭代器判断是否有下个元素
g.如果有下个元素则获取下个元素
4.存储学生对象并遍历:
<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;">package cn.bolg; public class Student { String name; int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } } </span></strong></span>
<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;">package cn.bolg; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Demo { /** * 使用学生对象加入集合并操作 */ public static void main(String[] args) { // 创建Collection集合对象 Collection c = new ArrayList(); // 创建自定义元素对象 Student s = new Student("张三", 23); Student s2 = new Student("李四", 22); Student s3 = new Student("王五", 24); Student s4 = new Student("赵六", 30); // 将元素对象加入Collection集合中 c.add(s); c.add(s2); c.add(s3); c.add(s4); // 使用迭代器遍历集合 // 创建迭代器对象 Iterator iterator = c.iterator(); // 使用迭代器对象的hasNext方法和next方法获取元素 while (iterator.hasNext()) { Student ss = (Student) iterator.next(); // 输出迭代器获取的元素 System.out.println(ss); } } } </span></strong></span>
三.单列集合List
1.List的特点:
List:元素有序(存入顺序和取出顺序一致),可重复。
2.List的特有功能:
A:添加功能
add(int index,Object obj)
B:删除功能
remove(int index)
C:获取功能
get(int index)
D:修改功能
set(int index,Object obj)
3.List特有的迭代器listIterator
A: 可以逆向遍历,但是要先正向遍历,一般不用。
B: 可以解决并发修改异常问题。
并发修改异常:在用迭代器遍历集合的时候,通过集合去修改了集合的元素。
解决方案:
a:通过列表迭代器遍历,通过列表迭代器修改集合。
b:通过集合遍历,通过集合修改集合。
listIterator案例:
<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;">package cn.bolg; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class Demo4 { /** * 使用List特有的listIterator迭代器对List集合进行遍历以及添加元素 * 并使用listIterator迭代器特有的hasPrevious方法及previous方法 对List集合进行逆向遍历 */ public static void main(String[] args) { // 创建List集合对象 List list = new ArrayList(); // 创建字符串元素对象 String s = "邓超"; String s2 = "陈赫"; String s3 = "包贝尔"; String s4 = "李晨"; // 将字符串元素添加入List集合 list.add(s); list.add(s2); list.add(s3); list.add(s4); // 使用List特有的listIterator迭代器遍历List集合 // 创建迭代器对象 ListIterator listIterator = list.listIterator(); // 使用listIterator迭代器特有的方法给List添加元素"angelaBaby" listIterator.add("angelaBaby"); // 使用迭代器的hasNext方法查看元素并用next方法获取元素 while (listIterator.hasNext()) { String string = (String) listIterator.next(); // 依次输出获取到的集合元素 System.out.println(string); } System.out.println("+++++++++++++++++++"); // 使用listIterator的hasPrevious方法及previous方法对List集合进行逆向遍历 while (listIterator.hasPrevious()) { String string2 = (String) listIterator.previous(); // 依次输出逆向获取到的集合元素 System.out.println(string2); } } } </span></strong></span>
4.List的三个子类的特点:
A.List:
|--ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低,一般不用。
|--LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
四.Collection和List及子类的遍历方式
Collection:
只能使用Iterator迭代器进行遍历
List:
方式一:使用普通for循环,通过索引进行遍历
方式二:使用listIterator迭代器遍历
ArrayList
方式一:使用普通for循环,通过索引进行遍历
方式二:使用listIterator迭代器遍历
Vector
方式一:使用普通for循环,通过索引进行遍历
方式二:使用返回Enumeration枚举进行遍历
LinkedList
方式一:使用普通for循环,通过索引进行遍历
方式二:使用listIterator迭代器遍历
案例:
List存储字符串并遍历。
<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;">package cn.bolg; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Demo2 { /** * 将字符串对象加入List集合并遍历 */ public static void main(String[] args) { //创建List集合对象 List list = new ArrayList(); //创建字符串元素对象 String s="woaijava"; String s2="wolikejava"; String s3="wolovejava"; //将元素对象添加进List集合 list.add(s); list.add(s2); list.add(s3); //对List集合进行遍历 //创建迭代器对象 Iterator iterator = list.iterator(); //使用迭代器的hasNext方法和next方法获取字符串元素 while (iterator.hasNext()) { String st = (String) iterator.next(); //输出迭代器中获取到的元素 System.out.println(st); } } } </span></strong></span>
List存储自定义对象并遍历。
<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;">package cn.bolg; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Demo3 { /** * 自定义学生对象并加入List集合及遍历 */ public static void main(String[] args) { //创建List集合对象 List list = new ArrayList(); //创建学生对象 Student s= new Student("邓紫棋",25); Student s2= new Student("邓俪",30); Student s3= new Student("白百合",31); Student s4= new Student("范冰冰",34); //将学生对象添加进List集合 list.add(s); list.add(s2); list.add(s3); list.add(s4); //遍历List集合 //创建list的迭代器对象 Iterator iterator = list.iterator(); //使用迭代器的hasNext方法查找元素,next方法获取元素 while (iterator.hasNext()) { Student sd = (Student) iterator.next(); //输出迭代器获取到的元素 System.out.println(sd); } } } </span></strong></span>
相关文章推荐
- 黑马程序员--Java基础学习(集合框架)第十五天
- java面试题笔记2015-08-22
- 阿里巴巴实习生招聘电话面试分享
- iOS 常见面试题总结3
- iOS 常见面试题总结3
- 黑马程序员12交通信号灯系统
- 黑马程序员----JavaSE常用API小结
- 信息时代的特点及个人职业选择
- 黑马程序员11模拟实现银行业务调度系统
- 黑马程序员10java高新技术
- 115个Java面试题和答案——终极列表(下)
- 黑马程序员--Java基础学习(String)第十三天
- 115个Java面试题和答案——终极列表(上)
- 每个程序员需掌握的20个代码命名小贴士
- 程序员必读的六本书
- 剑指offer面试题15-链表中倒数第k个节点
- 如今仍在工作的12名最“屌”的程序员
- PHP几个比较常见的面试程序题整理
- 5种类型的程序员
- 黑马程序员--Java基础学习(多线程)第十一天