Day17笔记
一、集合(掌握)
1.1 定义
- 集合是存储对象的对象
- 是一个数据容器
- 定义了对象元素进行操作的很多方法
1.2 Collection集合体系
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ZugaRv1-1597799102714)(集合体系图.jpg)]
1.3 创建Collection对象
- 因为Collection是接口,无法直接创建对象
- 可以使用多态的方式,声明Collection的引用,引用指向Collection的实现类
package com.qf.coll;
import java.util.ArrayList;
import java.util.Collection;
public class Demo01 {
public static void main(String[] args) {
// 创建Collection集合的对象,执行实现类ArrayList
Collection coll = new ArrayList();
}
}
1.4 增加元素
- add
- addAll
package com.qf.coll;
import java.util.ArrayList;
import java.util.Collection;
public class Demo02 {
public static void main(String[] args) {
/**
* 增加
* boolean add(E e)
确保此 collection 包含指定的元素(可选操作)。
boolean addAll(Collection<? extends E> c)
将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
*/
Collection coll = new ArrayList();
coll.add("张三");
coll.add(23);
coll.add(true);
coll.add("法外狂徒");
System.out.println(coll);
System.out.println(coll.size());
coll.add("张三");
coll.add(23);
coll.add(true);
coll.add("法外狂徒");
System.out.println(coll);
System.out.println(coll.size());
Collection coll02 = new ArrayList();
coll02.add("床前明月光");
coll02.add("疑是地上霜");
coll02.add("举头望明月");
coll02.add("低头思故乡");
System.out.println(coll02);
// 把另一个集合中的元素全放入本集合
coll.addAll(coll02);
System.out.println(coll);
}
}
1.5 删除元素
- remove
- removeAll
- retainAll
- clear
package com.qf.coll;
import java.util.ArrayList;
import java.util.Collection;
public class Demo03 {
public static void main(String[] args) {
/**
删除
boolean remove(Object o)
从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
boolean removeAll(Collection<?> c)
移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
boolean retainAll(Collection<?> c)
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
void clear()
移除此 collection 中的所有元素(可选操作)。
*/
Collection coll01 = new ArrayList();
coll01.add("111");
coll01.add("222");
coll01.add("333");
coll01.add("宋江");
coll01.add("李逵");
coll01.add("鲁智深");
System.out.println(coll01);
boolean ret = coll01.remove("李逵");
System.out.println(ret);
ret = coll01.remove("李逵");
System.out.println(ret);
System.out.println(coll01);
Collection coll02 = new ArrayList();
coll02.add("111");
coll02.add("222");
coll02.add("333");
coll02.add("444");
System.out.println(coll02);
// 删除两个集合的交集
// ret = coll02.removeAll(coll01);
System.out.println(ret);
System.out.println(coll01);
System.out.println(coll02);
// 保存两个集合的交集
ret = coll01.retainAll(coll02);
System.out.println(ret);
System.out.println(coll01);
System.out.println(coll02);
coll02.clear();
System.out.println(coll02);
}
}
1.6 查看元素
- contains
- containsAll
- isEmpty
- size
package com.qf.coll;
import java.util.ArrayList;
import java.util.Collection;
public class Demo04 {
public static void main(String[] args) {
/**
查看
boolean contains(Object o)
如果此 collection 包含指定的元素,则返回 true。
boolean containsAll(Collection<?> c)
如果此 collection 包含指定 collection 中的所有元素,则返回 true。
boolean isEmpty()
如果此 collection 不包含元素,则返回 true。
Iterator<E> iterator()
返回在此 collection 的元素上进行迭代的迭代器。
int size()
返回此 collection 中的元素数。
其他
Object[] toArray()
返回包含此 collection 中所有元素的数组。
<T> T[]
toArray(T[] a)
返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
*/
Collection coll = new ArrayList();
coll.add("虚竹");
coll.add("段誉");
coll.add("乔峰");
coll.add("玄慈方丈");
System.out.println(coll);
System.out.println(coll.contains("虚竹"));
Collection coll02 = new ArrayList();
coll02.add("天山童姥");
coll02.add("李秋水");
coll02.add("木婉清");
coll02.add("虚竹");
coll02.add("段誉");
coll02.add("乔峰");
coll02.add("玄慈方丈");
// 判断集合A是否完全包含集合B
System.out.println(coll02.containsAll(coll));
System.out.println(coll.isEmpty());
System.out.println(coll.size());
}
}
1.7 其他操作
- toArray
- iterator
package com.qf.coll;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo05 {
public static void main(String[] args) {
/**
其他
Object[] toArray()
返回包含此 collection 中所有元素的数组。
<T> T[]
toArray(T[] a)
返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
*/
Collection coll = new ArrayList();
coll.add("锄禾日当午");
coll.add("汗滴禾下土");
coll.add("谁知盘中餐");
coll.add("粒粒皆辛苦");
System.out.println(coll);
System.out.println(coll.getClass().getName());
Object[] arr = coll.toArray();
System.out.println(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
Iterator it = coll.iterator();
while (it.hasNext()) {
Object object = (Object) it.next();
System.out.println(object);
}
}
}
二、List(掌握)
2.1 定义
- 有序的Collection
- 是Collection的子接口
- 此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
- 列表通常允许重复的元素。更确切地讲,列表通常允许满足
e1.equals(e2)
的元素对e1
和
e2
,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素。
2.2 创建对象
- List是一个接口,不能直接创建对象
- List可以声明为引用,引用指向具体的实现类
package com.qf.list;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Demo01 {
public static void main(String[] args) {
List list = new ArrayList();
List list2 = new LinkedList();
}
}
2.3 增加元素
- add(e)
- add(index,e)
- addAll©
- addAll(index,c)
package com.qf.list;
import java.util.ArrayList;
import java.util.List;
public class Demo02 {
public static void main(String[] args) {
/**
* 增加
* boolean add(E e)
向列表的尾部添加指定的元素(可选操作)。
void add(int index, E element)
在列表的指定位置插入指定元素(可选操作)。
boolean addAll(Collection<? extends E> c)
添加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序(可选操作)。
boolean addAll(int index, Collection<? extends E> c)
将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。
*/
List list01 = new ArrayList();
list01.add("刘备");
list01.add("关羽");
list01.add("张飞");
list01.add("陆逊");
System.out.println(list01);
list01.add(0,"曹操");
System.out.println(list01);
List list02 = new ArrayList();
list02.add("许褚");
list02.add("典韦");
list02.add("张辽");
list02.add("曹安民");
System.out.println(list02);
list01.addAll(1,list02);
System.out.println(list01);
}
}
2.4 删除元素
- remove(index)
- remove(object)
- removeAll
- retainAll(collection)
- clear
package com.qf.list;
import java.util.ArrayList;
import java.util.List;
public class Demo03 {
public static void main(String[] args) {
/**
删除
E remove(int index)
移除列表中指定位置的元素(可选操作)。
boolean remove(Object o)
从此列表中移除第一次出现的指定元素(如果存在)(可选操作)。
boolean removeAll(Collection<?> c)
从列表中移除指定 collection 中包含的其所有元素(可选操作)。
boolean retainAll(Collection<?> c)
仅在列表中保留指定 collection 中所包含的元素(可选操作)。
void clear()
从列表中移除所有元素(可选操作)。
*/
List list01 = new ArrayList();
list01.add("刘备");
list01.add("关羽");
list01.add("张飞");
list01.add("陆逊");
List list02 = new ArrayList();
list02.add("许褚");
list02.add("典韦");
list02.add("张辽");
list02.add("曹安民");
boolean ret = list01.remove("关羽");
System.out.println(ret);
System.out.println(list01);
ret = list01.remove("关羽");
System.out.println(ret);
System.out.println(list01);
System.out.println(list01.remove(1));
System.out.println(list01.remove(1));
list01.add(1);
list01.add(1);
list01.add(2);
System.out.println(list01);
// 优先以下标为参考移出元素
list01.remove(2);
System.out.println(list01);
System.out.println(list01);
list01.add("许褚");
list01.add("典韦");
list01.add("张辽");
System.out.println(list01);
// 移出集合A和B的交集
// list01.removeAll(list02);
System.out.println(list01);
// 取出交集
list01.retainAll(list02);
System.out.println(list01);
}
}
2.5 修改和删除
package com.qf.list;
import java.util.ArrayList;
import java.util.List;
public class Demo04 {
public static void main(String[] args) {
/**
修改
E set(int index, E element)
用指定元素替换列表中指定位置的元素(可选操作)。
查询
boolean contains(Object o)
如果列表包含指定的元素,则返回 true。
boolean containsAll(Collection<?> c)
如果列表包含指定 collection 的所有元素,则返回 true。
E get(int index)
返回列表中指定位置的元素。
int indexOf(Object o)
返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。
boolean isEmpty()
如果列表不包含元素,则返回 true。
int lastIndexOf(Object o)
最后一次出现的位置
int size()
返回列表中的元素数。
*/
List list01 = new ArrayList();
list01.add("刘备");
list01.add("关羽");
list01.add("张飞");
list01.add("陆逊");
List list02 = new ArrayList();
list02.add("许褚");
list02.add("典韦");
list02.add("张辽");
list02.add("曹安民");
System.out.println(list01);
// 通过索引找到具体的元素,再次赋值
list01.set(3, "黄忠");
System.out.println(list01);
System.out.println(list01.contains("陆逊"));
System.out.println(list01.containsAll(list02));
System.out.println(list01.get(2));
System.out.println(list01.indexOf("陆逊"));
System.out.println(list01.indexOf("黄忠"));
System.out.println(list01.size());
}
}
三、ArrayList(重点掌握)
3.1 定义
List
接口的大小可变数组的实现。- 实现了所有可选列表操作,并允许包括 在内的所有元素。
- 除了实现 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。
- 基于数组实现的一个list集合
3.2 创建对象
- 底层基于数组实现,创建的过程和数组基本一样
package com.qf.arrlist;
import java.util.ArrayList;
public class Demo01 {
public static void main(String[] args) {
/**
* 构造方法摘要
ArrayList()
构造一个初始容量为 10 的空列表。
ArrayList(Collection<? extends E> c)
构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
ArrayList(int initialCapacity)
构造一个具有指定初始容量的空列表。
*/
ArrayList list = new ArrayList();
list.add("武松");
list.add("大郎");
list.add("西门大官人");
System.out.println(list);
ArrayList list02 = new ArrayList(list);
System.out.println(list02);
ArrayList list03 = new ArrayList(30);
}
}
3.3 遍历ArrayList
- for
- while
- foreach
- iterator
- listIterator
package com.qf.arrlist;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;
public class Demo03 {
public static void main(String[] args) {
/**
* 遍历ArrayList
*
*/
ArrayList list = new ArrayList();
list.add("奔波儿灞");
list.add("霸波尔奔");
list.add("白骨精");
list.add("金角大王");
list.add("银角大王");
list.add("铜角大王");
System.out.println(list);
System.out.println("=============for===============");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("=============while===============");
int index = 0;
while (index < list.size()) {
System.out.println(list.get(index++));
}
System.out.println("=============foreach===============");
/**
* 不使用下标就能遍历集合或者数组
* for(容器中的数据类型 临时遍历名 : 目标容器){
* 循环进行的操作
* }
*/
for (Object name : list) {
System.out.println(name);
}
System.out.println("=============iterator===============");
Iterator it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
System.out.println("=============listIterator===============");
ListIterator lit = list.listIterator();
while (lit.hasNext()) {
Object object = (Object) lit.next();
System.out.println(object);
}
while(lit.hasPrevious()) {
System.out.println(lit.previous());
}
}
}
四、LinkedList
4.1 定义
List
接口的链接列表实现。- 实现所有可选的列表操作,并且允许所有元素(包括 )。
- 除了实现 接口外, 类还为在列表的开头及结尾 、 和 元素提供了统一的命名方法。
- 这些操作允许将链接列表用作堆栈、或。nullListLinkedListgetremoveinsert队列双端队列
4.2 创建对象
4.3 常用方法
package com.qf.linkedlist;
import java.util.LinkedList;
public class Demo01 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
LinkedList list = new LinkedList();
list.add("奔波儿灞");
list.add("霸波尔奔");
list.add("白骨精");
list.add("金角大王");
list.add("银角大王");
list.add("铜角大王");
System.out.println(list.pop());
// 编写代码,验证LinkedList中的增删改查的方法
}
}