1、集合-集合的由来:
数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少
数组和集合的区别
区别1 :
数组既可以存储基本数据类型(int float char long double),又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象(例如int就存为Interger)
区别2:
数组长度是固定的,不能自动增长
集合的长度的是可变的,可以根据元素的增加而增长
2、集合的体系:
Collection(单列集合的根接口)
|
List(接口:存取顺序一致,有索引,可以重复) Set(接口:存取顺序不一致,无索引,不可以重复)
| | | | |
ArrayList(数组实现) LinkedList(链表实现) Vector(数组实现) HashSet(Hash算法) TreeSet(二叉树)
3、集合-集合转数组遍历:toArray() 暂时没有加泛型
Collection coll = new ArrayList();
coll.add(new Student("张三",23)); //Object obj = new Student("张三",23);
coll.add(new Student("李四",24));
coll.add(new Student("王五",25));
coll.add(new Student("赵六",26));
Object[] arr = coll.toArray(); //将集合转换成数组,使用Object的数组接收
for (int i = 0; i < arr.length; i++) {
Student s = (Student)arr[i]; //向下强转成Student,因为arr[i]本身就是个Student的对象,所以可以强转
System.out.println(s.getName() + "-" + s.getAge());
}
4、集合-集合带All功能测试:
boolean addAll(Collection c)
boolean removeAll(Collection c)//删除的是两个集合的交集
boolean containsAll(Collection c)//判断调用的集合是否包含传入的集合
boolean retainAll(Collection c)//取交集,如果调用的集合改变就返回true,如果调用的集合不变就返回false
例如:
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
Collection c2 = new ArrayList();
c2.add("a");
c2.add("b");
c2.add("c");
c2.add("d");
c1.addAll(c2); //将c2中的每一个元素添加到c1中,结果[a, b, c, d, a, b, c, d]
//c1.add(c2); //将c2看成一个对象添加到c1中,结果[a, b, c, d, [a, b, c, d]]
5、集合-使用迭代器遍历:
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
Iterator it = c.iterator(); //获取迭代器的引用,是一个接口
while(it.hasNext()) { //集合中的迭代方法(遍历)
System.out.println(it.next());
}
自定义对象并遍历:
Collection c = new ArrayList();
c.add(new Student("张三",23));
c.add(new Student("李四",24));
c.add(new Student("王五",25));
c.add(new Student("赵六",26));
c.add(new Student("赵六",26));
Iterator it = c.iterator(); //获取迭代器
while(it.hasNext()) { //判断集合中是否有元素
//System.out.println(((Student)(it.next())).getName() + "," + ((Student)(it.next())).getAge());
Student s = (Student)it.next(); //向下转型
System.out.println(s.getName() + "," + s.getAge()); //获取对象中的姓名和年龄
}
6、集合-数据结构之数组和链表
A:数组
查询快修改也快 //可以根据索引查找
增删慢 //增删需要移动其他所有的数据
B:链表 每个数据对象记录了前一个和后一个对象的地址值,查询需要一个个问,增删的话只需要改变数据对象的前后地址值就行,不需要移动其他数据。
查询慢,修改也慢
增删快
7、集合-数据结构之数组和链表
A:List的三个子类的特点
ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
Vector相对ArrayList查询慢(线程安全的)
Vector相对LinkedList增删慢(数组结构)
LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
Vector和ArrayList的区别
Vector是线程安全的,效率低
ArrayList是线程不安全的,效率高
共同点:都是数组实现的
ArrayList和LinkedList的区别
ArrayList底层是数组结果,查询和修改快
LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
共同点:都是线程不安全的
数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少
数组和集合的区别
区别1 :
数组既可以存储基本数据类型(int float char long double),又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象(例如int就存为Interger)
区别2:
数组长度是固定的,不能自动增长
集合的长度的是可变的,可以根据元素的增加而增长
2、集合的体系:
Collection(单列集合的根接口)
|
List(接口:存取顺序一致,有索引,可以重复) Set(接口:存取顺序不一致,无索引,不可以重复)
| | | | |
ArrayList(数组实现) LinkedList(链表实现) Vector(数组实现) HashSet(Hash算法) TreeSet(二叉树)
3、集合-集合转数组遍历:toArray() 暂时没有加泛型
Collection coll = new ArrayList();
coll.add(new Student("张三",23)); //Object obj = new Student("张三",23);
coll.add(new Student("李四",24));
coll.add(new Student("王五",25));
coll.add(new Student("赵六",26));
Object[] arr = coll.toArray(); //将集合转换成数组,使用Object的数组接收
for (int i = 0; i < arr.length; i++) {
Student s = (Student)arr[i]; //向下强转成Student,因为arr[i]本身就是个Student的对象,所以可以强转
System.out.println(s.getName() + "-" + s.getAge());
}
4、集合-集合带All功能测试:
boolean addAll(Collection c)
boolean removeAll(Collection c)//删除的是两个集合的交集
boolean containsAll(Collection c)//判断调用的集合是否包含传入的集合
boolean retainAll(Collection c)//取交集,如果调用的集合改变就返回true,如果调用的集合不变就返回false
例如:
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
Collection c2 = new ArrayList();
c2.add("a");
c2.add("b");
c2.add("c");
c2.add("d");
c1.addAll(c2); //将c2中的每一个元素添加到c1中,结果[a, b, c, d, a, b, c, d]
//c1.add(c2); //将c2看成一个对象添加到c1中,结果[a, b, c, d, [a, b, c, d]]
5、集合-使用迭代器遍历:
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
Iterator it = c.iterator(); //获取迭代器的引用,是一个接口
while(it.hasNext()) { //集合中的迭代方法(遍历)
System.out.println(it.next());
}
自定义对象并遍历:
Collection c = new ArrayList();
c.add(new Student("张三",23));
c.add(new Student("李四",24));
c.add(new Student("王五",25));
c.add(new Student("赵六",26));
c.add(new Student("赵六",26));
Iterator it = c.iterator(); //获取迭代器
while(it.hasNext()) { //判断集合中是否有元素
//System.out.println(((Student)(it.next())).getName() + "," + ((Student)(it.next())).getAge());
Student s = (Student)it.next(); //向下转型
System.out.println(s.getName() + "," + s.getAge()); //获取对象中的姓名和年龄
}
6、集合-数据结构之数组和链表
A:数组
查询快修改也快 //可以根据索引查找
增删慢 //增删需要移动其他所有的数据
B:链表 每个数据对象记录了前一个和后一个对象的地址值,查询需要一个个问,增删的话只需要改变数据对象的前后地址值就行,不需要移动其他数据。
查询慢,修改也慢
增删快
7、集合-数据结构之数组和链表
A:List的三个子类的特点
ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
Vector相对ArrayList查询慢(线程安全的)
Vector相对LinkedList增删慢(数组结构)
LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
Vector和ArrayList的区别
Vector是线程安全的,效率低
ArrayList是线程不安全的,效率高
共同点:都是数组实现的
ArrayList和LinkedList的区别
ArrayList底层是数组结果,查询和修改快
LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
共同点:都是线程不安全的