------- android培训、java培训、期待与您交流! ----------
集合框架
(1)java是面向对象的语言,我们经常的操作就是操作对象。
假如我们要操作多个对象,可以使用我们前面讲过的对象数组。
但是,数组定义的时候,要明确元素个数或者明确元素值。
而很多时候,这些我们都不明确,所以,java就提供了集合来存储对象元素。
(2)集合和数组的区别
A:集合只能存储对象元素(它存储的基本数据类型,其实是由一个装箱的过程)。
集合的长度是可以变化的。
B:数组可以存储对象元素,也可以存储基本数据类型元素。
数组的长度是固定的。
(3)由于多个集合容器的数据结构不同,所以,他们不断的抽取就形成了集合的体现结构。
Collection
|--List
|--ArrayList
|--Vector
|--LinkedList
|--Set
|--HashSet
|--TreeSet
(4)集合顶层接口Collection中的方法:
A:存储元素
add(Object obj) *****
addAll(Collection c)
B:删除元素
remove(Object obj)
removeAll(Collection c)
clear()
C:判断
isEmpty()
contains(Object obj)
containsAll(Collection c)
D:长度
size()
E:迭代器
iterator() *****
F:交集
retainAll()
G:转成数组
toArray()
(5)Iterator的理解
其实,集合的对象通过iterator方法,返回的是迭代器的子类对象。
每种集合获取元素的方式是不同的,所以,他们会自己去实现如果获取元素。
但是,他们都有共性内容:就是先判断是否有数据,然后获取数据。
所以,就抽取出了一个接口Iterator。
理解:游戏厅的抓小玩具游戏。
(6)集合存储自定义对象及内存图。
1:List接口
(1)List接口是Collection接口的一个子接口。
(2)List接口中的元素有如下特点:
A:元素有序(存储顺序和取出顺序一致)
B:元素可以重复
(3)List接口中的特有方法
A:add(int index,Object obj):在指定位置加入元素
B:remove(int index):移除指定位置的元素
C:set(int index,Object obj):修改指定位置的元素
D:get(int index):获取指定位置的元素
E:indexOf(Object obj):获取指定元素的位置
F:subList(int start,int end):从一个大的List中截取一个小的List
G:listIterator():返回一个List接口特有的迭代器
(4)重点代码
A:集合存储字符串
public class StringDemo
{
public static void main(String[] args)
{
//Collection c = new ArrayList();
//ArrayList list = new ArrayList();
List list = new ArrayList();
list.add("haha");
list.add("hehe");
list.add("heihei");
//遍历
Iterator it = list.iterator();
while(it.hasNext())
{
String s = it.next();
System.out.println(s);
}
}
}
B:集合存储自定义对象
public class Student
{
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
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;
}
}
public class StudentTest
{
public static void main(String[] args)
{
List list = new ArrayList();
Student s1 = new Student();
s1.setName("张三");
s1.setAge(20);
list.add(s1);
Student s2 = new Student();
s2.setName("李四");
s2.setAge(25);
list.add(s2);
Student s3 = new Student();
s3.setName("王五");
s3.setAge(22);
list.add(s3);
Iterator it = list.iterator();
while(it.hasNext())
{
Student s = (Student) it.next();
System.out.println(s.getName()+"***"+s.getAge());
}
}
}
2:List的子实现类
List
|--ArrayList
底层数据结构是数组,而且是线程不安全的。
增删慢,查询快
|--Vector
底层数据结构是数组,而且是线程安全的。
增删慢,查询快。但是,又由于线程安全,所以,它是都慢。一般不选择。
|--LinkedList
底层数据结构是链表,而且是线程不安全的。
增删快,查询慢
一般情况下,使用哪种List接口下的实现类呢?
如果要求增删快,考虑使用LinkedList
如果要求查询快,考虑使用ArrayList
如果要求线程安全,考虑使用Vector。
如果考虑不到任何问题,就使用ArrayList。