黑马程序员 集合框架知识点
------- android培训、java培训、期待与您交流!----------
知识点总结(一)
1:集合(掌握)
(1)集合的由来
我们需要对多个对象进行存储和获取。可以使用对象数组。
但是,如果对象的个数是变化的,对象数组就解决不了了。
怎么办呢?java就提供了集合类解决。
(2)集合和数组的区别?
A:长度问题
数组长度固定
集合长度可变
B:存储元素类型1
数组只能存储同一种类型
集合可以存储不同类型的对象
C:存储元素类型2
数组可以存储基本类型,也可以存储引用类型。
集合只能存储引用类型。
(3)集合体系的由来:
多种集合的数据结构不同,但是,它们有共性的功能。
通过不断的向上抽取,最终形成了集合的体系结构。
Collection
|--List
|--ArrayList
|--Vector
|--LinkedList
|--Set
|--HashSet
|--TreeSet
(4)Collection接口的功能:
A:添加功能
add(Object obj)
B:删除功能
remove(Object obj)
C:判断功能
contains(Object obj)
D:获取功能
Iterator iterator()
E:长度功能
size()
(5)迭代器
A:迭代器其实就是遍历集合的一种方式。
B:迭代器的使用:
迭代器不能单独使用,它依赖于集合而存在。
C:使用步骤
a:通过集合对象调用iterator()方法得到迭代器对象。
b:通过迭代器对象的hasNext()方法判断是否有元素。
c:通过迭代器对象的next()获取元素。
D:原理:
是以内部类形式存在的。
(6)案例:(掌握)
集合的使用步骤:
A:创建集合对象
B:创建元素对象
C:把元素添加到集合中
D:遍历集合
a:通过集合对象调用iterator()方法得到迭代器对象。
b:通过迭代器对象的hasNext()方法判断是否有元素。
c:通过迭代器对象的next()获取元素。
存储字符串并遍历:
Collection c = new ArrayList();
String s1 = "hello";
String s2 = "world";
String s3 = "java";
c.add(s1);
c.add(s2);
c.add(s3);
Iterator it = c.iterator();
while(it.hasNext()) {
String s = (String) it.next();
System.out.println(s);
}
存储自定义对象并遍历:自己补齐。
2:List及其子类(掌握)
(1)List的特点:
Collection
|--List:元素有序(存入顺序和取出顺序一致),可重复。
|--Set:元素无序,唯一。
(2)List的特有功能:
A:添加功能
add(int index,Object obj)
B:删除功能
remove(int index)
C:获取功能
get(int index)
D:修改功能
set(int index,Object obj)
(3)案例:
List存储字符串并遍历。
List存储自定义对象并遍历。
使用集合存储自定义对象的步骤:
1、定义要存储到集合当中的类
2、创建 集合 集合引用变量 = new 集合();
3、创建要存储到集合当中的类的对象们
4、调用集合方法,存储对应的对象
5、返回对应集合的迭代器
6、使用迭代器判断是否有下个元素
7、如果有下个元素则获取下个元素
(4)ListIterator(理解)
A:可以逆向遍历,但是要先正向遍历,所以一般不用。
B:可以解决并发修改异常问题。
并发修改异常:在用迭代器遍历集合的时候,通过集合去修改了集合的元素。
解决方案:
a:通过列表迭代器遍历,通过列表迭代器修改集合。
b:通过集合遍历,通过集合修改集合。
(二)代码实现部分
1.import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
/*
* Collection: Collection 层次结构 中的根接口
*
* 由于Collection是接口,所以这里使用 使用频率最高的ArrayList子类对象来完成多态。演示Collection的方法。
*
* Collection的普通方法:
* boolean add(E e) 确保此 collection 包含指定的元素(可选操作)。
*/
public class Demo01_Collection {
public static void main(String[] args) {
Person[] persons = new Person[3];
persons[0] = new Person("罗大佑",48);
persons[1] = new Person("周华健",58);
persons[2] = new Person("李宗盛",68);
System.out.println(Arrays.toString(persons));
//创建集合对象
Collection c = new ArrayList();
//创建元素对象
Person p = new Person("罗大佑",48);
Person p2 = new Person("周华健",58);
Person p3 = new Person("李宗盛",68);
Person p4 = new Person("柯受良",90);
//将元素放到集合中
c.add(p);
c.add(p2);
c.add(p3);
c.add(p4);
//查看集合
System.out.println(c);
}
2.
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/*
* 集合的遍历:
* 集合的迭代
*
* Collection的返回迭代器方法:
* Iterator iterator(): 返回该集合的迭代器对象
*
* Iterator: 迭代器类
* boolean hasNext() 判断是否有下一个元素
* E next() 返回下一个元素
*/
public class Demo05_Iterator {
public static void main(String[] args) {
//创建集合对象
Collection c = new ArrayList();
//创建元素对象
//将元素放到集合中
c.add("唐嫣");
c.add("戚薇");
c.add("赵丽颖");
c.add("杨颖");
System.out.println(c);
//迭代集合
//返回迭代器
Iterator iterator = c.iterator();
//调用迭代器的hashNext与next方法完成迭代
while(iterator.hasNext()) {
Object next = iterator.next();
String sNext = (String)next;
System.out.println(sNext+"救出来了,她很感谢我,为我跳了一支舞");
}
}
}
3.将存储字符串的集合转成数组,并遍历
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
/*
* 将存储字符串的集合转成数组,并遍历。
*
* Collection: {"拉登","巴马","加菲","达姆"} >> String[] arr ["拉登","巴马","加菲","达姆"]
*/
public class Test3 {
public static void main(String[] args) {
//创建集合,添加内容
Collection c = new ArrayList();
c.add("拉登");
c.add("巴马");
c.add("加菲");
c.add("达姆");
//创建数组,将集合内容添加到数组
int arrLength = c.size();
String[] names = new String[arrLength];
//定义变量,记录临时索引
int index = 0;
//迭代集合,依次获取每一个元素
Iterator iterator = c.iterator();
while (iterator.hasNext()) {
String name = (String) iterator.next();
//将获取到的每一个名字,添加到数组中
names[index] = name;
//每赋值一个元素,就将数组索引往后+1
index++;
}
//查看数组是否为集合中的内容
System.out.println(Arrays.toString(names));
}
}
4.
import java.util.ArrayList;
import java.util.List;
/*
* List: 有序可重复的Collection集合接口
* ArrayList:List的实现类
*
* 构造方法:
* public ArrayList() 创建一个空的集合
*
* List的普通方法:
* 1:void add(int index, E element) 在列表的指定位置插入指定元素
* 2:E remove(int index) 删除指定索引的元素 返回值为被删除的对象
* 3:E get(int index) 获取指定索引位置的对象
* 4:E set(int index, E element) 将指定索引处的元素,改为新的元素 返回值为被修改的对象
*/
public class Demo01_List {
public static void main(String[] args) {
List list = new ArrayList();
list.add("唐嫣");
list.add("唐嫣");
list.add("张惠妹");
list.add("那英");
list.add("韩红");
System.out.println(list);
//1:void add(int index, E element) 在列表的指定位置插入指定元素
list.add(1, "刘亦菲");
System.out.println(list);
//2:E remove(int index) 删除指定索引的元素
Object remove = list.remove(5);
System.out.println(remove);
System.out.println(list);
//3:E get(int index) 获取指定索引位置的对象
System.out.println(list.get(0));
// System.out.println(list.get(100)); IndexOutOfBoundsException
//4:E set(int index, E element) 将指定索引处的元素,改为新的元素
Object set = list.set(3, "柳岩");
System.out.println(set);
System.out.println(list);
}
}
(三)一点看法;集合这是基础班的重点要掌握的内容!以上是知识点总结和相关代码的实现!