2019年 2月18日 天气:好大雨啊 19:19
A:案例演示
Student[] arr = new Student[5]; //存储学生对象
arr[0] = new Student("张三", 23);
arr[1] = new Student("李四", 24);
arr[2] = new Student("王五", 25);
arr[3] = new Student("赵六", 26);
arr[4] = new Student("马哥", 20);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
B:画图演示
A:案例演示
基本功能演示
boolean add(E e)
//add(),返回类型boolean,一直返回true,因为list可以存储重复的元素,而set不可以,那时候才返回false
boolean b1 = c.add("abc"); //添加元素到指定集合中
boolean remove(Object o) //
void clear()
boolean contains(Object o)
boolean isEmpty()
int size()
B:注意:
package com.heima.collection;
import java.util.ArrayList;
import java.util.Collection;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class test03_function {
public static void main(String[] args) {
Collection c = new ArrayList(); //父类引用指向子类对象
// boolean add(),返回类型boolean,一直返回true,因为list可以存储重复的元素
boolean b1 = c.add("abc");
boolean b2 = c.add(true); //自动装箱
boolean b3 = c.add(100);
boolean b4 = c.add("abc");
System.out.println(c); //重写了toString方法
//boolean remove(),删除指定元素
c.remove(b1);
System.out.println(c);
//boolean clear() 清空集合
c.clear();
System.out.println(c);
//boolean isEmpty() 判断是否为空
System.out.println(c.isEmpty());
c.add("abc");
c.add(true); //自动装箱
c.add(100);
System.out.println(c);
//booean contains() 判断是否包含
System.out.println(c.contains("abc"));
//int size() 获取元素个数
System.out.println(c.size());
}
}
[abc, true, 100, abc]
[abc, 100, abc]
[]
true
[abc, true, 100]
true
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(); //将集合转换成数组
for (int i = 0; i < arr.length; i++) {
Student s = (Student)arr[i]; //强转成Student
System.out.println(s.getName() + "," + s.getAge());
}
package com.heima.collection;
import java.util.ArrayList;
import java.util.Collection;
import com.heima.bean.Student;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class test04_toArray {
public static void main(String[] args) {
demo1();
Collection c = new ArrayList();
c.add(new Student("张三", 23)); //类型提升为 Object obj = new Student();
c.add(new Student("李四",24));
c.add(new Student("李四", 25));
Object[] arr = c.toArray();
for (int i = 0; i < arr.length; i++) {
//System.out.println(arr[i]);
Student s = (Student)arr[i]; //向下转型
System.out.println(s.getName() + "..." + s.getAge());
}
}
private static void demo1() {
Collection c = new ArrayList();
c.add('a');
c.add('b');
c.add('c');
Object[] arr = c.toArray();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
a
b
c
张三…23
李四…24
李四…25
带All的功能演示
boolean addAll(Collection c) //将传入集合每一个元素添加 到调用集合中
boolean removeAll(Collection c) //将传入集合从调用集合中删除(删除的是交集,没有交集就返回false)
boolean containsAll(Collection c) //判断调用集合中是否包含传入集合(是否有交集)
boolean retainAll(Collection c) //取交集,没有交集返回[](调用集合与传入集合相同时候才为false,因为外国人的定义,如果调用集合改变了就返回true)
代码实现:
package com.heima.collection;
import java.util.ArrayList;
import java.util.Collection;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class test05 {
public static void main(String[] args) {
//addall();
//removeall();
//containsall();
//retainsall();
}
private static void retainsall() {
Collection c1 = new ArrayList();
c1.add('a');
c1.add('b');
c1.add('c');
c1.add('d');
System.out.println(c1);
Collection c2 = new ArrayList();
c2.add('a');
c2.add('b');
c2.add('c');
c2.add('d');
System.out.println(c2);
boolean bb = c1.retainAll(c2); //取交集
System.out.println(bb);
System.out.println(c1);
Collection c3 = new ArrayList();
c3.add('a');
c3.add('b');
c3.add('c');
c3.add('d');
System.out.println(c3);
Collection c4 = new ArrayList();
c4.add('z');
c4.add('z');
c4.add('g');
System.out.println(c4);
boolean b = c3.retainAll(c4);
System.out.println(b);
System.out.println(c3);
}
private static void containsall() {
Collection c1 = new ArrayList();
c1.add('a');
c1.add('b');
c1.add('c');
c1.add('d');
System.out.println(c1);
Collection c2 = new ArrayList();
c2.add('a');
c2.add('b');
c2.add('b');
System.out.println(c2);
boolean b = c1.containsAll(c1); // 判断调用集合是否包含传入的集合
System.out.println(b);
}
private static void removeall() {
Collection c1 = new ArrayList();
c1.add('a');
c1.add('b');
c1.add('c');
c1.add('d');
System.out.println(c1);
Collection c2 = new ArrayList();
c2.add('x');
c2.add('x');
c2.add('x');
System.out.println(c2);
boolean b = c1.removeAll(c2); //删除的是交集,没有交集就返回false
System.out.println(b);
System.out.println(c1);
}
private static void addall() {
Collection c1 = new ArrayList();
c1.add('a');
c1.add('b');
c1.add('c');
c1.add('d');
System.out.println(c1);
Collection c2 = new ArrayList();
c2.add('a');
c2.add('b');
c2.add('c');
c2.add('d');
System.out.println(c2);
boolean b = c1.addAll(c2); //将集合c2中的每一个元素都添加到c1中
//c1.add(c2); //将集合c2作为一个对象添加到集合c1中
System.out.println(b);
System.out.println(c1);
}
}
A:迭代器概述
B:案例演示
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());
}
代码练习:
package com.heima.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import org.omg.Messaging.SyncScopeHelper;
import com.heima.bean.Student;
public class test06_Interator {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add('a');
c.add('b');
c.add('c');
Iterator t = c.iterator(); //获取迭代器
while(t.hasNext()) { //判断集合中是否有下一个元素
System.out.println(t.next()); //返回集合的下一个元素
}
Collection c2 = new ArrayList();
c2.add(new Student("张三",23)); //会自动提升为Object( Object obj = new Student();)
c2.add(new Student("李四", 24));
c2.add(new Student("王五", 25));
Iterator t2 = c2.iterator();
while(t2.hasNext()) {
System.out.println(t2.next());
}
Iterator t3 = c2.iterator();
while(t3.hasNext()) {
Student stu = (Student)t3.next();
System.out.println(stu.getName() + "..." + stu.getAge());
}
}
}
a
b
c
Student [name=张三, age=23]
Student [name=李四, age=24]
Student [name=王五, age=25]
张三…23
李四…24
王五…25
Collection c = new ArrayList();
c.add(new Student("张三",23)); // Object obj = new Student(),向上转型
c.add(new Student("李四",24));
c.add(new Student("王五",25));
c.add(new Student("赵六",26));
c.add(new Student("赵六",26));
for(Iterator it = c.iterator();it.hasNext();) {
Student s = (Student)it.next(); //向下转型
System.out.println(s.getName() + "," + s.getAge()); //获取对象中的姓名和年龄
}
System.out.println("------------------------------");
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()); //获取对象中的姓名和年龄
}
A:List集合的特有功能概述
代码练习:
package com.heima.List;
import java.util.ArrayList;
import java.util.List;
public class test09_list {
public static void main(String[] args) {
demo1();
demo2();
demo3();
demo4();
}
public static void demo4() {
List list = new ArrayList();
list.add('a');
list.add('b');
list.add('c');
list.add('d');
System.out.println(list);
Object obj = list.set(1, 'z'); //修改特定索引的元素为指定元素
System.out.println(obj);
System.out.println(list);
System.out.println();
}
public static void demo3() {
List list = new ArrayList();
list.add('a');
list.add('b');
list.add('c');
list.add('d');
System.out.println(list);
for (int i = 0; i < list.size(); i++) {
// Object obj = list.get(i);
// System.out.println(obj);
System.out.println(list.get(i)); //获取特定索引位置的值并返回
}
System.out.println();
}
public static void demo2() {
List list = new ArrayList();
list.add('a');
list.add('b');
list.add('c');
list.add('d');
System.out.println(list);
Object obj = list.remove(0); //根据index索引删除元素,并返回被删除元素
System.out.println(obj);
System.out.println();
}
public static void demo1() {
List list = new ArrayList();
list.add('a');
list.add('b');
list.add('c');
list.add('d');
System.out.println(list);
list.add(0, 'z');//指定位置添加元素,index>=0 && index <= list.size()
System.out.println(list);
System.out.println();
}
}
[a, b, c, d]
[z, a, b, c, d]
[a, b, c, d]
a
[a, b, c, d]
a
b
c
d
[a, b, c, d]
b
[a, z, c, d]
代码实现
List list = new ArrayList();
list.add(new Student("张三", 18));
list.add(new Student("李四", 18));
list.add(new Student("王五", 18));
list.add(new Student("赵六", 18));
for(int i = 0; i < list.size(); i++) {
Student s = (Student)list.get(i);
System.out.println(s.getName() + "," + s.getAge());
}
A:案例演示
需求:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("world");
list.add("d");
list.add("e");
/*Iterator it = list.iterator();
while(it.hasNext()) {
String str = (String)it.next();
if(str.equals("world")) {
list.add("javaee"); //这里会抛出ConcurrentModificationException并发修改异常
}
}*/
B:ConcurrentModificationException(并发修改异常)出现
C:解决方案
a:迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add)
b:迭代遍历元素,迭代修改元素
ListIterator lit = list.listIterator(); //如果想在遍历的过程中添加元素,可以用ListIterator中的add方法
while(lit.hasNext()) {
String str = (String)lit.next();
if(str.equals("world")) {
lit.add("javaee");
//list.add("javaee");
}
}
package com.heima.List;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class test11 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("world"); //Object obj = new String()
list.add("c");
list.add("d");
System.out.println(list);
Iterator it = list.iterator(); //迭代器
/* while(it.hasNext()) {
String str = (String)it.next(); //向下转型
if("world".equals(str)) {
list.add("javaee"); //迭代时list添加元素(添加了元素但是没有告诉迭代器),出现并发修改异常。ConcurrentModificationException
}
}*/
ListIterator lit = list.listIterator();//获取迭代器,list集合特有
while(lit.hasNext()) {
String str = (String)lit.next();
if("world".equals(str)) {
lit.add("javaee"); //迭代器给集合添加元素
}
}
System.out.println(list);
}
}
[a, b, world, c, d]
[a, b, world, javaee, c, d]
package com.heima.List;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class test12 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("world"); //Object obj = new String()
list.add("c");
list.add("d");
System.out.println(list);
ListIterator lit = list.listIterator();//获取迭代器
System.out.println("正向遍历:");
while(lit.hasNext()) {
System.out.println(lit.next());
}
System.out.println("反向遍历:");
while(lit.hasPrevious()) {
System.out.println(lit.previous());
}
}
}
[a, b, world, c, d]
正向遍历:
a
b
world
c
d
反向遍历:
d
c
world
b
a
Vector的迭代
Vector v = new Vector(); //创建集合对象,List的子类
v.addElement("a");
v.addElement("b");
v.addElement("c");
v.addElement("d");
//Vector迭代
Enumeration en = v.elements(); //获取枚举
while(en.hasMoreElements()) { //判断集合中是否有元素
System.out.println(en.nextElement());//获取集合中的元素
}
A:数组
B:链表
底层以数组实现的集合,当存储位置不够的时候,创建一个新的数组,增加百分之五十的存储空间,再将原来数组的元素复制到新的数组中
链表删除元素:
查询:(根据索引进行判断,看从前面近还是后面近,再决定从前还是从后进行查询,一个挨着一个向后或者向前查)
修改:先进行查询再进行修改
A:List的三个子类的特点
ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
Vector相对ArrayList查询慢(线程安全的)
Vector相对LinkedList增删慢(数组结构)
Vector和ArrayList的区别
Vector是线程安全的,效率低
ArrayList是线程不安全的,效率高
共同点: 都是数组实现的
ArrayList和LinkedList的区别
ArrayList底层是数组结果,查询和修改快
LinkedList底层是链表结构的,增删比较快,查询和修改比较慢
共同点:都是线程不安全的
B:List有三个儿子,我们到底使用谁呢?